切片就像数组的引用
切片就像数组的引用
切片并不存储任何数据,它只是描述了底层数组中的一段。
更改切片的元素会修改其底层数组中对应的元素。
与它共享底层数组的切片都会观测到这些修改。 package main import "fmt" func main() { names := [4]string{ "John", "Paul", "George", "Ringo", } fmt.Println(names) a := names[0:2] b := names[1:3] fmt.Println(a, b) b[0] = "XXX" //这里实际上是修改了b引用的数组的数据,所以a,b乃至names都能观察到这次修改 fmt.Println(a, b) fmt.Println(names) } //执行结果 [John Paul George Ringo] [John Paul] [Paul George] [John XXX] [XXX George] [John XXX George Ringo]
22
1 package
main 2 3 import
"fmt" 4 5 func
main () { 6
names :
[ 4 ] string { 7
"John" , 8
"Paul" , 9
"George" , 10
"Ringo" , 11
} 12
fmt . Println ( names ) 13 14
a :
names [ 0 : 2 ] 15
b :
names [ 1 : 3 ] 16
fmt . Println ( a , b ) 17 18
b [ 0 ]
"XXX"
//这里实际上是修改了b引用的数组的数据,所以a,b乃至names都能观察到这次修改 19
fmt . Println ( a , b ) 20
fmt . Println ( names ) 21 } 22 //执行结果 23 [ John
Paul
George
Ringo ] 24 [ John
Paul ] [ Paul
George ] 25 [ John
XXX ] [ XXX
George ] 26 [ John
XXX
George
Ringo ] 27