切片就像数组的引用

程序员成长之旅 · 程序员成长之旅/Go语言学习/笔记 · 286 字

切片就像数组的引用

切片并不存储任何数据,它只是描述了底层数组中的一段。

更改切片的元素会修改其底层数组中对应的元素。

与它共享底层数组的切片都会观测到这些修改。 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