這段代碼: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條經(jīng)驗 獲得超4個贊
該方法采用接收方參數(shù)中字段的地址handler
。handler
每次調(diào)用該函數(shù)時都會創(chuàng)建一個新值。
使用指針接收器來獲得您期望的結(jié)果:
func (handler *Handler) State() *State { return &handler.state }
在這種情況下,該函數(shù)返回調(diào)用者的handler
.
- 1 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消