GO语言学习笔记2(指针数组MAP)

来源:互联网 发布:罗曼电动牙刷知乎 编辑:程序博客网 时间:2024/05/22 08:21

指针声明

var p *int

或者

i := 2

p = &i

*p 表示取内容

但是对于数组/结构,可以直接通过p[1]/p.X来访问


结构的定义有点类似与C

type Vertex struct {
X int
Y int
}

初始化可以使用

v := Vertex{1, 2}
v.X = 4

其他几种定义方式

var (
v1 = Vertex{1, 2}  // has type Vertex
v2 = Vertex{X: 1}  // Y:0 is implicit
v3 = Vertex{}      // X:0 and Y:0
p  = &Vertex{1, 2} // has type *Vertex
)


数组的定义

var a [10]int


Slices是一个类似与数组的东西,它以一个数组为基础加上了长度信息。这里有详细的介绍http://blog.csdn.net/wuwenxiang91322/article/details/9072449

var a [10]int
s := a[1:5] 

此时slice的长度为4,容量为10

同时s的初始化既可以s := []int{2, 3, 5, 7, 11, 13} 也可以 s := [12]int{2, 3, 5, 7, 11, 13} 二者只是cap(s)不同,len(s)相同

s可以进行切片,比如s[1:2]

同时s也可以使用make: 

s := make([]int, 0, 5) 其中len = 0, cap = 5

slice也可以使用append添加元素

a = append(a, 2, 3, 4)

但是添加涉及到len 和 cap的不同增加,还需后续研究


元素历遍

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}


func main() {
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
}

i代表index, 从0开始,也可以使用for _, value := range pow{}忽略index


map的声明,初始化和赋值

var m map[string]int

func main() {
m = make(map[string]int)
m["Bell Labs"] = 2
fmt.Println(m["Bell Labs"])
}

也可以一次性声明加初始化

m := map[string]int{
"Bell Labs": 1,
"Google": 2,
}

注意1上面的2后面必须有逗号,而是:=只能用于函数内,外部必须用var


使用delete(m, "Answer")可以删除元素。但是访问m["Answer"] 返回 0, 这是需要使用

elem, ok = m[key]

如果为空则ok==false

func也可以赋给变量

hypot := func(x, y float64) float64 {
return math.Sqrt(x*x + y*y)
}
fmt.Println(hypot(3, 4))

同时go语言支持闭包,可以在函数内定义函数并返回

func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}


0 0
原创粉丝点击