“Static” method design

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 
}

Nhưng, nếu tôi muốn tải một người dùng hoặc thanh toán, tôi chỉ cần loại bỏ người nhận:

var u *User
user := u.Get(585)

Tôi có thể không gian tên của chính các chức năng, điều này khiến tôi unclean:

func GetUser(id int) *User {
    // Returns the user with the given id 
}

func GetPayment(id int) *Payment {
    // Returns the payment with the given id 
}

Golang does not support constructors.

Thay vào đó, hãy sử dụng các hàm gốc ([Tham khảo Go hiệu quả] (https://golang.org/doc/effective_go.html#composite_literals)). Quy ước là sử dụng tiền tố New:

func NewUser(id int) *User {
    // Returns new User instance
}