第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

除了暫時將方法分配給變量之外,還有什么方法可以將方法綁定到 Go 映射?

除了暫時將方法分配給變量之外,還有什么方法可以將方法綁定到 Go 映射?

Go
回首憶惘然 2021-07-30 07:38:05
這段代碼工作正常,但用于調(diào)用該函數(shù)的臨時變量感覺很笨重package mainimport "fmt"type Foo struct {    name  string    value int}// SetName receives a pointer to Foo so it can modify it.func (f *Foo) SetName(name string) {    f.name = name}var users = map[string]Foo{}func main() {    // Notice the Foo{}. The new(Foo) was just a syntactic sugar for &Foo{}    // and we don't need a pointer to the Foo, so I replaced it.    // Not relevant to the problem, though.    //p := Foo{}    users["a"] = Foo{value: 1}    x := users["a"]    x.SetName("Abc")    users["a"] = x    fmt.Println(users)}http://play.golang.org/p/vAXthNBfdP
查看完整描述

2 回答

?
慕雪6442864

TA貢獻1812條經(jīng)驗 獲得超5個贊

抱歉不行。在 Go 中,指針通常是透明的,當(dāng)你對它們調(diào)用指針方法時,值會自動尋址。您設(shè)法找到了少數(shù)沒有的情況之一。這種情況是地圖存儲——地圖中的值不被認為是可尋址的。也就是說,你永遠做不到val := &map[key]。

當(dāng)你val := Typ{}定義了一個值和方法時*Typ,當(dāng)你嘗試調(diào)用val.Method()Go 時會超級偷偷地做(&val).Method()。既然你不能做&map[key],那么這不起作用,所以你做的臨時可變舞蹈是唯一的方法。

至于為什么會這樣,地圖的內(nèi)部結(jié)構(gòu)對于用戶來說被認為有點秘密,因為它是一個哈希圖,它保留重新分配自身、隨機數(shù)據(jù)等的權(quán)利,允許您獲取任何破壞該地址的值的地址. 已經(jīng)考慮過允許這種特定情況起作用的建議(即:調(diào)用帶有指針接收器的方法),因為修復(fù)非常簡單,但尚未被接受。也許有一天會被允許,但不是現(xiàn)在。


查看完整回答
反對 回復(fù) 2021-08-02
  • 2 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號