Tôi đang tìm kiếm lời khuyên về cách tốt nhất để làm sạch cấu trúc sau. Tôi biết Go không có phương pháp tĩnh và thường là better to encapsulate functionality in a separate package. Các kiểu cấu trúc của tôi tham chiếu lẫn nhau và do đó không thể được khai báo trong các gói riêng biệt do nhập khẩu vòng tròn.Đi: Thiết kế phương pháp "tĩnh"
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ỉ ném đi người nhận:
var u *User
user := u.Get(585)
tôi có thể không gian tên các chức năng bản thân, mà đập vào mắt tôi là ô uế:
func GetUser(id int) *User {
// Returns the user with the given id
}
func GetPayment(id int) *Payment {
// Returns the payment with the given id
}
Tôi thực sự muốn có thể gọi .Get
hoặc tương tự trên cấu trúc mà không cần viết tên của cấu trúc trong chính hàm đó. Cách thành ngữ để làm điều này là gì?
Có, tôi tìm thấy '.Get()' trên một cấu trúc mà tôi đang ném đi thậm chí còn ô uế hơn. Với tôi 'User.Get()' là sạch nhất; nếu 'GetUser' là xấp xỉ gần nhất tôi có thể nhận được, tôi sẽ lấy nó. – ash
@ash Có, tôi tin rằng nó là gần nhất bạn có thể nhận được, và cách thành công nhất Go để làm điều đó. –
Bạn không thể tạo các khung công tác và thư viện với GetUser và GetPayment – rocketspacer