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

Ala*_*orm 0 types go

go 类型的实例可以更改其基础值吗?感谢之前的一个问题,我知道如果我的类型是结构,我可以将函数的接收器设为指针并更改结构字段

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

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)
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jim*_*imB 5

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

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

func (f *Foo) ChangeMe() {
    *f = Foo("Hello World")
}
Run Code Online (Sandbox Code Playgroud)