您的位置:首页 > 编程语言 > Go语言

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

2015-09-04 03:01 811 查看
指针声明

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: