【问题标题】:What is the point of passing a pointer to a strings in go (golang)?在go(golang)中传递指向字符串的指针有什么意义?
【发布时间】:2014-07-08 22:09:39
【问题描述】:

我正在阅读以下关于 go (golang) 字符串的 conversation。 go 中的字符串只是指向(只读)数组和长度的指针。因此,当您将它们传递给函数时,指针作为值而不是整个字符串传递。因此,我想到,如果这是真的,那么为什么你甚至可以定义为一个函数,其签名以*string 作为参数?如果字符串已经在加号,则数据是不可变/只读的,因此无论如何您都无法更改它。如果 go 在内部已经这样做了,那么允许传递指向字符串的指针有什么意义?

【问题讨论】:

  • 一种语言无法避免开发人员可能产生的所有误解
  • 禁止这样做没有任何好处。

标签: string pointers go


【解决方案1】:

你传递一个指向保存字符串的“对象”的指针,这样你就可以给它分配一个不同的字符串。

示例:http://play.golang.org/p/Gsybc7Me-5

func ps(s *string) {
    *s = "hoo"
}
func main() {
    s := "boo"
    ps(&s)
    fmt.Println(s)
}

【讨论】:

    【解决方案2】:

    一个原因是,您可以使用指针来区分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)
    }
    

    https://golang.org/ref/spec#The_zero_value

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 2010-12-24
      • 2016-07-12
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多