代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

通过Golang中的方法更改类型的基础值

  •  0
  • Alana Storm  · 技术社区  · 7 年前

    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() .

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

    对我关于围棋的错误假设和我想做的任何技巧都感兴趣。

    1 回复  |  直到 7 年前
        1
  •  4
  •   JimB    7 年前

    您正在为 f 而不是取消引用。

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

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