更改类型';通过Golang中的一种方法获得的基本价值

更改类型';通过Golang中的一种方法获得的基本价值,go,types,Go,Types,go类型的实例能否更改其基础值?多亏了a,我知道如果我的类型是结构,我可以 但是,我对更改基础类型的值很感兴趣。考虑这样一个小程序 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) } 我天真的假设

go类型的实例能否更改其基础值?多亏了a,我知道如果我的类型是结构,我可以

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

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()
中的值

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


对我关于go的错误假设和实现我想要做的任何技术都感兴趣。

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

取消引用
f
并指定一个新的字符串值:

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

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

取消引用
f
并指定一个新的字符串值:

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