下面兩行代碼在 Go 語(yǔ)言中做同樣的事情嗎?我想要做的是將一個(gè)切片復(fù)制到另一個(gè)切片中:slice1 := make([]int, 5)slice2 := slice1 #line1slice2 := slice1[:] #line2我運(yùn)行這段代碼來(lái)測(cè)試行為,但顯然它們都以相同的方式工作:func main() { s1 := make([]int, 5, 5) s1[2] = 33 fmt.Printf("s1: %v: address of slice %p\n", s1, &s1) s2 := s1[:] s2[1] = 5 fmt.Printf("s2: %v: address of slice %p\n", s2, &s2) s3 := s1 s3[0] = 23 fmt.Printf("s3: %v: address of slice %p\n",s3, &s3) fmt.Printf("s2: %v: address of slice %p\n", s2, &s2) fmt.Printf("s1: %v: address of slice %p\n", s1, &s1)}輸出是:s1: [0 0 33 0 0]: address of slice 0x40c0e0s2: [0 5 33 0 0]: address of slice 0x40c100s3: [23 5 33 0 0]: address of slice 0x40c120s2: [23 5 33 0 0]: address of slice 0x40c100s1: [23 5 33 0 0]: address of slice 0x40c0e0因此,切片(s1、s2、s3)的內(nèi)存地址不同,但指向包含在其中的數(shù)組的指針指向相同的內(nèi)存地址。我想知道這兩種方式之間是否有什么變化,或者是否有某種約定說(shuō)明更好用。
slice2 := slice1 等于 GoLang 中的 slice2 := slice1[:]
飲歌長(zhǎng)嘯
2023-05-15 09:50:33