1 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
基本上,您的Set
方法需要一個(gè)指針接收器才能更改結(jié)構(gòu)的狀態(tài)。
具有指針接收器的方法可以修改接收器指向的值。由于方法通常需要修改其接收者,因此指針接收者比值接收者更常見(jiàn)。
Get
還應(yīng)該有一個(gè)指針接收器以保持一致性:
接下來(lái)是一致性。如果該類(lèi)型的一些方法必須有指針接收者,其余的也應(yīng)該有,所以無(wú)論該類(lèi)型如何使用,方法集都是一致的。
這是您的代碼的修復(fù):
package main
import (
? ? "fmt"
)
type Foo struct {
? ? t map[string]interface{}
}
func (F *Foo) Set(ta map[string]interface{}) {
? ? F.t = ta
}
func (F *Foo) Get() map[string]interface{} {
? ? return F.t
}
func main() {
? ? t := make(map[string]interface{})
? ? t["t"] = "sf"
? ? t["array"] = []int{1, 2, 3}
? ? fmt.Println(t)
? ? var f Foo
? ? f.Set(t)
? ? fmt.Println(f.Get()) //prints map[t:sf array:[1 2 3]]
? ? f.t = t
? ? fmt.Println(f.Get()) //prints map[t:sf array:[1 2 3]]
}
產(chǎn)出
map[t:sf array:[1 2 3]]
map[t:sf array:[1 2 3]]
map[t:sf array:[1 2 3]]
- 1 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報(bào)