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

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

指針/非指針類型的struct字段賦值差異

指針/非指針類型的struct字段賦值差異

Go
函數(shù)式編程 2021-11-22 18:34:33
在 Go 編程語言的第 4.4 節(jié)(結(jié)構(gòu))中,有一段代碼摘錄:var dilbert Employeefunc EmployeeByID(id int) *Employee { /* ... */ }id := dilbert.IDEmployeeByID(id).salary = 0與此評論如果將 的結(jié)果類型EmployeeByID更改為Employee而不是*Employee,則賦值語句將無法編譯,因為其左側(cè)無法識別變量。我不明白為什么更改EmployeeByIDto的結(jié)果類型Employee會導(dǎo)致 LHS 無法識別變量。
查看完整描述

3 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊

我已經(jīng)研究過這個主題,我認(rèn)為如果您更改為 Employee 而不是 *Employee,那么 EmployeeByID(id) 將是一個無法尋址的值,因為它沒有分配給變量。如果你給它分配一個像下面這樣的變量就可以了:


e1 := EmployeeByID(id)

e1.Salary = 0


查看完整回答
反對 回復(fù) 2021-11-22
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊

這個簡化的例子演示了這個問題:


package main


type t struct {

    int

}


func newT() *t { return &t{} }

//func newT() t { return t{} }


func main() {

    newT().int = 0

}

我的猜測是,如果您使用newT不返回指針的版本,并且永遠(yuǎn)不會保存對 的結(jié)果的引用newT(),那么設(shè)置其int字段的值將永遠(yuǎn)無法做任何有意義的事情。這類似于設(shè)置一個未使用的變量。


如果你使用的是非指針版本newT但你有類似的東西:


x := newT()

x.int = 0

那你就好了。


或者,使用newT上面的指針版本也可以,因為它可能會返回您之前已經(jīng)定義的某些狀態(tài),請參見示例:


package main


type t struct {

    int

}


var dilbert = &t{3}


func newT() *t { return dilbert }


//func newT() t { return t{} }


func main() {

    println(dilbert.int)

    newT().int = 0

    println(dilbert.int)

}


查看完整回答
反對 回復(fù) 2021-11-22
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊

func EmployeeByID(id int) *Employee { /* ... */ }

這將返回一個指向 Employee 變量的指針。

func EmployeeByID(id int) Employee { /* ... */ }

這會返回一個從一個Employee變量復(fù)制。在使用它之前,您需要將它分配給一個變量。


查看完整回答
反對 回復(fù) 2021-11-22
  • 3 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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