这段代码:package mainimport ( "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,那么它会按我期望的方式工作。我在这里错过了什么?
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
该方法采用接收方参数中字段的地址handler
。handler
每次调用该函数时都会创建一个新值。
使用指针接收器来获得您期望的结果:
func (handler *Handler) State() *State { return &handler.state }
在这种情况下,该函数返回调用者的handler
.
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报
0/150
提交
取消