3.struct,slice
指针var p *int
结构体指针,以及结构体给值文法:
var ( v1 = Vertex{1, 2} // 创建一个 Vertex 类型的结构体 v2 = Vertex{X: 1} // Y:0 被隐式地赋予 v3 = Vertex{} // X:0 Y:0 p = &Vertex{1, 2} // 创建一个 *Vertex 类型的结构体(指针) )
数组var A【10】int
切片这里非常重点因为我不会,第一次接触,name:=【4】string{};s:=name【0,4】
切片有一些默认行为,在进行切片时,可以使用切片的默认行为来忽略上下界。
切片下界的默认值为0,上界则是该切片的长度。切片的零值为nil ,nil切片的长度与容量为0,且没有底层数组。我们也可以用make创建切片
举例子:之前不懂:s := []int{2, 3, 5, 7, 11, 13} s = s[1:4]对一开始的进行操作,得到3,5,7 s = s[:2]从0开始数2个,但是是对上次截取完的进行操作,是3,5 s = s[1:]从1开始数到结尾,所以是5
make也可以创建函数切片,传入三个变量(返回类型,长度,容积),没有容积时,默认容积和长度一样。a := make([]int, 5)默认为长度容积都是5, b := make([]int, 0, 5)默认长度是0,容积是5.
向切片添加元素:s = append(s, 0,1,1)用append,可以添加多个元素。
range在这里更新换代上一个笔记里面的for循环for i, _ := range pow for _, value := range pow第一个i如果不需要,也就是不需要索引,那可以for _ ,value;如果只需要索引,那就for i后面可以不加下划线,也就是说无论是否需要索引i,都要写,要么需要,要么下划线替代!!
4.映射,函数
type Vertex struct { Lat, Long float64 } var m = map[string]Vertex{ "Bell Labs": {40.68433, -74.39967}, "Google": {37.42202, -122.08408}, }
这是用make做的一个索引为string类型的vertex值映射
函数值也可以当作用作函数形参:
func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) }
这里形参是fn这个函数
函数的闭包:闭包是一个函数值,它引用了其函数体之外的变量。该函数可以访问并赋予其引用的变量的值,换句话说,该函数被这些变量“绑定”在一起。 举例子:斐波那契闭包`func fibonacci() func() int { back1 := 0 back2 := 1 return func() int { temp := back1 back1 = back2 back2 = back1 + back2 return temp }
}`