go语言中为什么使用切片指针?

这仍然是一个值传递和地址传递的问题, 直接看例子:

package main

import (
  "fmt"
)

func main() {
    slice:= []string{"a","a"}

    func(slice []string){
        slice= append(slice, "a")
        slice[0]="b";
        slice[1]="b";
        fmt.Print(slice)
    }(slice)
    fmt.Print(slice)
}

运行结果是[b b a][a a],所以函数里的改动没有传递到函数外面,这就是值传递。

再看地址传递的例子:

func main() {
    slice:= []string{"a","a"}

    func(slice *[]string){
        (*slice) = append((*slice), "a")
        (*slice)[0]="b";
        (*slice)[1]="b";
        fmt.Print(*slice)
    }(&slice)
    fmt.Print(slice)
}

运行结果是:[b b a][b b a]

参考

https://medium.com/swlh/golang-tips-why-pointers-to-slices-are-useful-and-how-ignoring-them-can-lead-to-tricky-bugs-cac90f72e77b

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容