【问题标题】:Changing a Type's Underlying Value via a Method in Golang通过 Golang 中的方法更改类型的基础值
【发布时间】:2019-01-01 15:27:42
【问题描述】:

go 类型的实例可以更改其基础值吗?感谢previous question,如果我的类型是结构,我知道我可以make my function's receiver a pointer and change struct fields

但是,我对更改底层类型的值很感兴趣。考虑一个这样的小程序

type Foo string

func (f *Foo) ChangeMe() {
  val := Foo("Hello World")
  f = &val
  //fmt.Println(*f)
}

func main() {
  f := Foo("Nope")
  f.ChangeMe()
  fmt.Println(f)
}

我的天真假设是“好的,我创建了一个新的Foo("Hello World"),然后将f 指向它。由于接收器是一个指针(*Foo),这应该会改变main() 中的值。

但是,这不起作用。上面的程序仍然打印出“Nope”

对我对 Go 的错误假设以及实现我想做的任何技术感兴趣。

【问题讨论】:

    标签: go types


    【解决方案1】:

    您正在为 f 分配一个新的指针值,而不是取消对它的引用。

    取消引用f并分配一个新的字符串值:

    func (f *Foo) ChangeMe() {
        *f = Foo("Hello World")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多