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

2021-07-23  本文已影响0人  louyang

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

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

上一篇下一篇

猜你喜欢

热点阅读