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

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

“靜態(tài)”方法設(shè)計(jì)

“靜態(tài)”方法設(shè)計(jì)

Go
阿晨1998 2021-06-27 16:12:15
我正在尋找有關(guān)清理以下結(jié)構(gòu)的最佳方法的建議。我知道 Go 沒有靜態(tài)方法,通常最好將功能封裝在單獨(dú)的包中。我的結(jié)構(gòu)類型相互引用,因此由于循環(huán)導(dǎo)入,無法在單獨(dú)的包中聲明。type Payment struct {    User *User}type User struct {    Payments *[]Payments}func (u *User) Get(id int) *User {    // Returns the user with the given id }func (p *Payment) Get(id int) *Payment {    // Returns the payment with the given id }但是,如果我想加載用戶或付款,我只是扔掉接收器:var u *Useruser := u.Get(585)我可以命名函數(shù)本身,這讓我覺得不干凈:func GetUser(id int) *User {    // Returns the user with the given id }func GetPayment(id int) *Payment {    // Returns the payment with the given id }我真的很希望能夠.Get在結(jié)構(gòu)上調(diào)用或類似,而無需在函數(shù)本身中寫入結(jié)構(gòu)的名稱。這樣做的慣用方法是什么?
查看完整描述

3 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

GetUser()GetPayment()讓我覺得非常清楚和慣用。我不確定你覺得他們有什么不潔之處。

調(diào)用.Get()一個(gè)結(jié)構(gòu)體返回另一個(gè)結(jié)構(gòu)體讓我覺得非常奇怪、不清楚和單調(diào)。

我認(rèn)為這可能只是堅(jiān)持慣用語并相信您會(huì)習(xí)慣的情況。


查看完整回答
反對 回復(fù) 2021-06-28
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

Golang 不支持構(gòu)造函數(shù)。


改用工廠函數(shù)(Effective Go 參考)。約定是使用New前綴:


func NewUser(id int) *User {

    // Returns new User instance

}

構(gòu)造函數(shù)和工廠函數(shù)的區(qū)別在于工廠函數(shù)沒有“附加”到User結(jié)構(gòu)體上。這是一個(gè)碰巧返回的正常函數(shù),User而 Java/C++ 之類的構(gòu)造函數(shù)是一種修改新創(chuàng)建User對象的方法。


查看完整回答
反對 回復(fù) 2021-06-28
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

有一個(gè)Get功能完全沒問題;它在任何方面都不是單調(diào)的。


func (u *User) Get(id int) *User沒有任何意義,雖然,它應(yīng)該是func (u *User) Get(id int) error。您缺少的一件事是您可以在指針上定義一個(gè)方法接收器,然后在該方法內(nèi)部取消引用該指針以覆蓋它指向的內(nèi)容。


像這樣:


// Returns the user with the given id 

func (u *User) Get(id int) error {

    *u = User{ ... } // dereference the pointer and assign something to it

    return nil // or an error here

}

如果有任何問題,返回一個(gè)錯(cuò)誤?,F(xiàn)在你可以說


type Getter interface {

    Get(int) error

}

因此Get(id)error可以定義任何定義的類型。然后你會(huì)像這樣使用它:


u := new(User)

if err := u.Get(id); err != nil {

    // problem getting user

}

// everything is cool.


查看完整回答
反對 回復(fù) 2021-06-28
  • 3 回答
  • 0 關(guān)注
  • 187 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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