次の構造をクリーンアップするための最良の方法についてのアドバイスを探しています。Go には静的メソッドがなく、通常は機能を別のパッケージにカプセル化することをお勧めします。私の構造体型は相互に参照しているため、循環インポートのために個別のパッケージで宣言できません。
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 *User
user := u.Get(585)
関数自体に名前を付けることができますが、これは汚れていると思います。
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
関数自体に構造体の名前を書き込まずに、構造体で呼び出しまたは同様のことができるようにしたいと本当に思っています。これを行うための慣用的な方法は何ですか?