我正在阅读关于go(golang)字符串的以下conversation。 go中的字符串只是指向(只读)数组和长度的指针。因此,当您将它们传递给函数时,指针将作为值而不是整个字符串传递。因此,在我看来,如果这是真的,那么为什么你甚至被允许定义为一个带有*string
作为参数的签名的函数?如果字符串已经加上,则数据是不可变的/只读的,因此无论如何都无法更改它。如果它已经在内部执行了那么允许将指针传递给字符串有什么意义呢?
答案 0 :(得分:16)
您将指针传递给"对象"拿着字符串,然后你可以分配不同的东西。
示例:http://play.golang.org/p/Gsybc7Me-5
func ps(s *string) {
*s = "hoo"
}
func main() {
s := "boo"
ps(&s)
fmt.Println(s)
}
答案 1 :(得分:0)
一个原因,是您可以使用指针来区分 nil
和零
价值:
package main
func f(s *string) {
switch {
case s == nil:
println("nil")
case *s == "":
println(`""`)
default:
println(*s)
}
}
func main() {
f(nil)
var s string
f(&s)
s = "north"
f(&s)
}