【发布时间】:2023-04-10 10:17:01
【问题描述】:
比较这两个例子
(来自:https://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/)
package main
import "fmt"
type Person struct {
firstName string
lastName string
}
func changeName(p Person) {
p.firstName = "Bob"
}
func main() {
person := Person {
firstName: "Alice",
lastName: "Dow",
}
changeName(person)
fmt.Println(person)
}
上面的代码返回{Alice Dow},所以结构没有改变。
现在在这个例子中
package main
import "fmt"
func main() {
slice := []string{"a", "b", "c"}
fmt.Println(slice)
updateSlice(slice)
fmt.Println(slice)
}
func updateSlice(slice []string) []string {
slice[0] = "x"
return slice
}
输出是
[a b c]
[x b c]
所以切片被函数updateSlice改变了。
有人能解释一下区别吗?
【问题讨论】: