Go Notes 2
map中value是否可寻址的问题,数组的比较和切片的比较,存在全局变量和局部变量时,调用方法会读取全局变量,for range的次数和副本问题
1、map中value是否可寻址的问题
Eg.
|
|
对于 map[string]Struct 和 map[string][]int的问题,由于结构体struct是不可寻址的,虽然可以读取这个值,但是不能把值赋值给x。而[]int是可寻址的,不仅可以读取,也可以赋值。解决方法:使用临时变量或者使用可寻址value。
2、数组的比较和切片的比较
1、go中不同类型不能相互比较,而数组长度是数组类型的一部分,所以不同长度的数组不能比较 2、切片不能比较
3、存在全局变量和局部变量时,调用方法会读取全局变量
eg.
|
|
会输出 extra 0 , main 3,则调用的方法会使用全局变量
4、for range的次数和副本问题
Eg. for rang的次数问题
|
|
不会出现死循环,循环次数在开始前就确定了
Eg. 副本问题
|
|
5、方法的值接受者和指针接受者
|
|
值类型只能调用值方法,指针类型既能调用值方法,也能调用指针方法。但是有时编译器会帮我们自动转义,所以下列语句都是可用的,不会报错。
1 2 3 4 5 6 7 8 9 10p := People{"xiaoming"} fmt.Println(p.getName()) //值类型只能调用值方法,此处是编译器自动转义,但是有特殊情况 p.SetName("xiaohong") fmt.Println(p.getName()) //指针类型既能调用值方法,也能调用指针方法 pp := &p pp.SetName("xiaolv") fmt.Println(pp.getName())
1emmmmm 我也有点疑惑,问题待定
Notes:值方法操作的是接受者的副本。