猿问

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

这段代码:


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,那么它会按我期望的方式工作。


我在这里错过了什么?


慕村9548890
浏览 85回答 1
1回答

MYYA

该方法采用接收方参数中字段的地址handler。handler每次调用该函数时都会创建一个新值。使用指针接收器来获得您期望的结果:func (handler *Handler) State() *State { return &handler.state }在这种情况下,该函数返回调用者的handler.
随时随地看视频慕课网APP

相关分类

Go
我要回答