这些天我开始学习 Go 并陷入尝试将结构属性的值(切片)传递给函数的过程中。显然它是作为引用传递的(或者它持有指向其切片的指针),并且在函数内部所做的更改会影响它。
这是我的代码,它testFunction应该接收一个切片,删除它的前 3 个元素并打印更新的值,但不会在外部影响它:
package main
import (
"fmt"
)
type testStruct struct {
testArray []float64
}
var test = testStruct {
testArray: []float64{10,20,30,40,50},
}
func main() {
fmt.Println(test.testArray)
testFunction(test.testArray)
fmt.Println(test.testArray)
}
func testFunction(array []float64) {
for i:=0; i<3; i++ {
array = removeFrom(array, 0)
}
fmt.Println(array)
}
func removeFrom(array []float64, index int) []float64 {
return append(array[:index], array[index+1:]...)
}
输出:
[10 20 30 40 50]
[40 50]
[40 50 50 50 50]
我的问题是:是什么导致第三个fmt.Println打印出这个奇怪的结果?
游乐场:https : //play.golang.org/p/G8W3H085In
ps:这段代码只是一个例子。删除某些东西的第一个元素不是我的目标。我只想知道是什么导致了这种奇怪的行为。
慕莱坞森
犯罪嫌疑人X
呼唤远方
相关分类