美文网首页
go语言中为什么使用切片指针?

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

作者: louyang | 来源:发表于2021-07-23 11:08 被阅读0次

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

    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

    相关文章

      网友评论

          本文标题:go语言中为什么使用切片指针?

          本文链接:https://www.haomeiwen.com/subject/gniumltx.html