3 回答
TA贡献1775条经验 获得超11个赞
GetUser()
并GetPayment()
让我觉得非常清楚和惯用。我不确定你觉得他们有什么不洁之处。
调用.Get()
一个结构体返回另一个结构体让我觉得非常奇怪、不清楚和单调。
我认为这可能只是坚持惯用语并相信您会习惯的情况。
TA贡献1818条经验 获得超7个赞
Golang 不支持构造函数。
改用工厂函数(Effective Go 参考)。约定是使用New前缀:
func NewUser(id int) *User {
// Returns new User instance
}
构造函数和工厂函数的区别在于工厂函数没有“附加”到User结构体上。这是一个碰巧返回的正常函数,User而 Java/C++ 之类的构造函数是一种修改新创建User对象的方法。
TA贡献1875条经验 获得超3个赞
有一个Get功能完全没问题;它在任何方面都不是单调的。
func (u *User) Get(id int) *User没有任何意义,虽然,它应该是func (u *User) Get(id int) error。您缺少的一件事是您可以在指针上定义一个方法接收器,然后在该方法内部取消引用该指针以覆盖它指向的内容。
像这样:
// 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
}
如果有任何问题,返回一个错误。现在你可以说
type Getter interface {
Get(int) error
}
因此Get(id)error可以定义任何定义的类型。然后你会像这样使用它:
u := new(User)
if err := u.Get(id); err != nil {
// problem getting user
}
// everything is cool.
- 3 回答
- 0 关注
- 167 浏览
添加回答
举报