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í)慣的情況。

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對象的方法。

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.
- 3 回答
- 0 關(guān)注
- 187 瀏覽
添加回答
舉報(bào)