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]
雖然說數組切片在函數傳遞時是按照引用的語義傳遞的,比如說在 sliceModify 函數里面 slice[0] = 88,在方法調用的上下文中,調用函數對slice引用的改表是看得見的。
但是在對slice進行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]