go语言基础 指针: 指针变量只能读取不能修改,不能修改指针变量指向的地址 & 根据变量取地址 * 根据内存地址取值
1 2 3 4 5 6 7 8 9 10 11 package main import "fmt" func main() { s := 5 fmt.Printf("%T",&s) //打印的是int类型的指针 *int a := &s fmt.Println() fmt.Printf("%T",*a)//打印的是int类型的值 int }
map: 1.map存储的是键值对的数据,也是需要申请内存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 var m1 map[string]int m1 = make(map[string]int) m1["jiayue"] = 100 fmt.Println(m1) m2 := map[string]int{ "jiayue" : 100, } // 声明之后必须初始化,才能使用,以下两种一个意思 package main var m map[string]int func main(){ m = make(map[string]int) //或者m = map[string]int{} m["jiayue"] = 100 fmt.Println(m) } ------------------------------------------------------------------------ package main func main(){ // 声明并初始化 <= 注意这里是 := 不是 = m := make(map[string]int) //或者m := map[string]int{"jiayue":1} m["jiayue"] = 1 fmt.Println(m) } ------------------------------------------------------------------------- package main var m = map[string]int{"jiayue":1} //Go允许声明带初始值的变量,变量可以是数组 切片 map 还有普通变量 func main(){ fmt.Println(m) }
2.map如果key不存在反馈的是value类型的是值 判断key是否存在 score,ok := m1[“jiayue”] 如果jiayue这个key不存在 ok 是false
3.delete删除map对应的值,如果删除的key不存在,那就什么都不干 delete(map变量,删除的key)
defer语句 defer把它后面的语句延迟到函数即将返回的时在执行 defer 多个的话后进先出原则 defer主要放便释放资源 比如关闭open的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main import "fmt" func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret } func main() { a := 1 b := 2 defer calc("1", a, calc("10", a, b)) //a和b的值已经代入,不受后面变量的改变而改变,calc里的calc会直 // 接运算,不等待defer a = 0 defer calc("2", a, calc("20", a, b)) //同理上面备注,只是a变成了0 b = 1 } //运行结果 // 10 1 2 3 // 20 0 2 2 // 2 0 2 2 // 1 1 3 4