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 }
在这种情况下,函数返回调用者的处理程序中字段的地址