Go 函数返回变量的地址。。。最终成为一个不同的变量?

Go 函数返回变量的地址。。。最终成为一个不同的变量?,go,Go,此代码: package main import ( "fmt" "encoding/json" ) type State struct { Foo string } type Handler struct { state State } func (handler Handler) State() *State { return &handler.state } func main() { input := `{"Foo": "bar"}` han

此代码:

package main

import (
    "fmt"
    "encoding/json"
)


type State struct { Foo string }
type Handler struct { state State }

func (handler Handler) State() *State { return &handler.state }

func main() {
   input := `{"Foo": "bar"}`
   handler := Handler{}
   state := handler.State()
   json.Unmarshal([]byte(input), state)


   fmt.Printf("%v\n", state)
   fmt.Printf("%v\n", handler.state)
}
印刷品

&{bar}
{}
()

这使我困惑:
handle.State()
返回
handler.State
的地址, 那么,
state
(即
&handler.state
)和
handler.state
如何可能最终包含不同的内容(一个是空的,另一个不是空的)

如果我将
state:=handler.state()
更改为
state:=&handler.state
,那么它的工作方式就是我所期望的


我错过了什么

该方法在receiver参数
handler
中获取字段的地址。每次调用函数时都会创建一个新的
处理程序

使用指针接收器获得您期望的结果:

func (handler *Handler) State() *State { return &handler.state }
在这种情况下,函数返回调用者的
处理程序中字段的地址