Go学习笔记(三)

来源:互联网 发布:java开发知识 编辑:程序博客网 时间:2024/06/05 04:49

2.表达式

1.保留字

2.运算符

3.初始化

4.控制流

if 

for

range 

switch

goto break continue


1.初始化

初始化复合对象,必须使用类型标签,且左大括号必须在类型尾部。

// var a struct { x int } = { 100 } // syntax error// var b []int = { 1, 2, 3 } // syntax error// c := struct {x int; y string} // syntax error: unexpected semicolon or newline// {// }var a = struct{ x int }{100}var b = []int{1, 2, 3}
初始化值以 ","分隔。可以分多行,但最后一行必须以 ",""}" 结尾。
a := []int{1,2 // Error: need trailing comma before newline in composite literal}a := []int{1,2, // ok}b := []int{1,2 } // ok


2. 注意,range会复制对象

a := [3]int{0, 1, 2}for i, v := range a { // index、 value 都是从复制品中取出。if i == 0 { // 在修改前,我们先修改原数组。a[1], a[2] = 999, 999fmt.Println(a) // 确认修改有效,输出 [0, 999, 999]。}a[i] = v + 100 // 使⽤复制品中取出的 value 修改原数组。}fmt.Println(a) // 输出 [100, 101, 102]。


建议改用引用类型,其底层数据不会被复制。

s := []int{1, 2, 3, 4, 5}for i, v := range s { // 复制 struct slice { pointer, len, cap }。if i == 0 {s = s[:3] // 对 slice 的修改,不会影响 range。s[2] = 100 // 对底层数据的修改。}println(i, v)}
输出:
0 1
1 2
2 100
3 4
4 5