package main
import "fmt"
func main() {
a := SomeType{myslice: []int{1, 2, 3}, decimal: 2.33}
for _, i := range a.myslice {
fmt.Println(i)
}
fmt.Println(a.decimal)
addOne(a)
for _, i := range a.myslice {
fmt.Println(i)
}
fmt.Println(a.decimal)
}
type SomeType struct {
myslice []int
decimal float32
}
func addOne(s SomeType) {
s.myslice[0]++
s.decimal += 1.2
}
上面代码的输出是:
1 2 3 2.33 2 2 3 2.33
即使我没有通过引用传递SomeType对象,也会在原始对象中修改myslice字段。为什么会这样?无论如何都要按值传递整个对象而不必创建原始对象的副本吗?
答案 0 :(得分:2)
切片实际上并未通过引用传递;如果你在var pkdNewsFeedsrun = angular.module('pkdNewsFeeds', []);
追加它,它的长度不会改变。但是切片包含到其后备数组的引用(或指针)。因此,当您复制切片时,新切片与旧切片共享相同的支持阵列。
切片在结构内部的事实并没有任何区别。如果您将addOne
更改为仅采用切片而不是整个结构,则会看到相同的内容。