这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
知识点
1.变量
(1)变量定义
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
(2)常量定义
const s string = "constant"
const h = 500000000
const i = 3e20 / h
2.循环
(1)for循环(唯一)
跟c类似,只是少了括号,
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
3.判断
(1)if语句
跟c类似,但是判断语句内可在判断条件上加定义变量
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
(2)switch语句
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
4.数组与切片
(1)数组
var a [5]int
a[4] = 100 //赋值
b := [5]int{1, 2, 3, 4, 5} //也可以这样赋值
var twoD [2][3]int //二维数组
(2) 切片
我感觉就是动态数组
s := make([]string, 3) //定义
s = append(s, "d") //在加一个元素,也就是下标为3的元素
5.map
跟c++的stl自带的map用法类似
m := make(map[string]int) // 定义
m["one"] = 1 // 插入数据
r, ok := m["two"] //第二个元素为bool,代表是否找到该元素
fmt.Println(r, ok) // 0 false
delete(m, "one") //删除元素
6.遍历
(1)range遍历数组
nums := []int{2, 3, 4}
for i, num := range nums {} //第一个代表下标,第二个代表值
(2)range遍历map
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {} //第一个代表关键字,第二个代表值
7.函数
格式:func 函数名 (参数1,参数2,...)(返回值类型1,返回值类型2...){}
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return
}
func exists(m map[string]string, k string) (string,bool) {
v, ok := m[k]
return v, ok
}
//以上两种返回值等价,区别在于是否在返回值处定义变量
v, ok := exists(map[string]string{"a": "A"}, "a") //函数调用
8.指针
跟c类似,多应用才函数调用
func add2ptr(n *int) {
*n += 2
}
add2ptr(&n) //修改n的值,若不使用指针,则无法修改n的值,结构体亦如此
9.结构体
(1)结构体定义及数据处理
type user struct {
name string
password string
}
//结构体定义
a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
//结构体插入数据
(2)结构体方法
也就是给结构体设置内置函数
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) { //使用指针才可修改值
u.password = password
}
a.resetPassword("2048") //调用
10.输出
(1)fmt.Println( ) 语句
很智能,相当于c++中的cout?直接在括号里面写入想输出的变量名
(2)fmt.Printf( ) 语句
跟c的printf类似,但也很方便,只需%v即可输出任何类型的变量
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("%.2f\n", f) // 3.14
11.时间处理
需要import “time”
(1)获取当前时间
now := time.Now()// 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
(2)输出年月日等信息
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute())
// 2022 March 27 1 25
(3)时间差diff的应用
diff := t2.Sub(t)
fmt.Println(diff) // 输出差了多久 如 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 输出差了多少分钟,多少秒 如 65 3900
12.数字解析
需要import “strconv”
(1)把字符串转成浮点型
f, _ := strconv.ParseFloat("1.234", 64)//返回值为(float64 error)
fmt.Println(f) // 1.234
(2)把字符串转成int型
n, _ := strconv.ParseInt("111", 10, 64)//第二个参数为进制 返回值为(int64 error)
fmt.Println(n) // 111
也可以默认10进制
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
注意:进制代表字符串是多少进制,最终结果输出均为10进制