为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕村9548890 2023-06-01 18:11:01
这段代码: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个赞

该方法采用接收方参数中字段的地址handlerhandler每次调用该函数时都会创建一个新值。

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

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

在这种情况下,该函数返回调用者的handler.


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信