切片面試題

輕描淡寫發表於2022-01-06
func main() {
    var s = [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    data := s[2:4]
    data[0] = 100
    data[1] = 101
    fmt.Println(s) // [0 1 100 101 4 5 6 7 8 9]
    s[2] = 2
    s[3] = 3
    fmt.Println(data) //[2 3]
    fmt.Println(s) //[0 1 2 3 4 5 6 7 8 9]
    fmt.Println(cap(data)) // 8

}

原因就是這兩個切片共用一個底層陣列。切片的結構體的 Data 是指標指向底層陣列的的,所以修改一個另一個也會隨之改變。詳細解釋

切片轉字串

strings.Replace(strings.Trim(fmt.Sprint(s), "[]"), " ", ",", -1)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章