問題:
eg:
func sliceModify(slice []int) {
// slice[0] = 88
slice = append(slice, 6)
}
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(slice)
fmt.Println(slice)
}
out: [1
2
3
4
5]
雖然說數(shù)組切片在函數(shù)傳遞時是按照引用的語義傳遞的,比如說在 sliceModify 函數(shù)里面 slice[0] = 88,在方法調(diào)用的上下文中,調(diào)用函數(shù)對slice引用的改表是看得見的。
但是在對slice進(jìn)行append操作的時候,返回的是新的引用,并非原始引用。
解決:
傳遞指針的指針
eg:
func sliceModify(slice *[]int) {
*slice = append(*slice, 6)
}
func main() {
slice := []int{1, 2, 3, 4, 5}
sliceModify(&slice)
fmt.Println(slice)
}
out: [1
2
3
4
5
6]