初始化struct中的字符串指针

Man*_*gor 12 struct pointers go

Go Newbie问题:我正在尝试使用默认值初始化以下结构.我知道如果"Uri"是一个字符串而不是指向字符串的指针(*string),它会起作用.但我需要这个指针来比较结构的两个实例,如果没有设置Uri将是nil,例如当我从json文件解组内容时.但是,如何将这样的结构正确地初始化为"静态默认"?

type Config struct {
  Uri       *string
}

func init() {
  var config = Config{ Uri: "my:default" }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码失败了

cannot use "string" (type string) as type *string in field value
Run Code Online (Sandbox Code Playgroud)

Nad*_*adh 20

获取常量值的地址(指向)是不可能的,这就是初始化失败的原因.如果您定义一个变量并传递其地址,那么您的示例将起作用.

type Config struct {
  Uri       *string
}

func init() {
  v := "my:default"
  var config = Config{ Uri: &v }
}
Run Code Online (Sandbox Code Playgroud)

  • 有没有一种方法可以在一个衬垫中做到这一点,这样就不需要 `v := "my:default"` 了? (15认同)
  • @Zamicol 在我以前和现在的公司中,我们只需创建辅助函数(StrPtr(val string)、Int64Ptr(val int64) 等)。我认为这种情况很常见,因此很有用。 (5认同)
  • 无需新变量赋值的更好方法: `func String(v string) *string { return &v }` func init(){ var config = Config{ Uri: String("my:default") } } (5认同)
  • 这里接受的答案也适用于字符串。有几种方法可以将其作为单行代码来完成,但它们很丑陋:/sf/ask/2150144811/ (2认同)