type User struct {
FullName string
FirstName string
LastName string
}
func (u *User) FullName() string {
return u.FirstName + " " + u.LastName
}
このコード行は、user.FullName
で、FullName属性に直接アクセスする代わりにFullNameメソッドを呼び出す必要があります。 Goでこれを行う方法はありますか?そして、この例では、このようなエラーがスローされます。type User has both field and method named FullName
Goの属性に直接アクセスするのではなく、メソッドをトリガする方法は?
例のユースケース:
姓名
は、DBに保持されますが、完全な名前ではありません。 User構造体のフルネームフィールドにアクセスするだけでは、ユーザーのフルネームは正しく返されません。もう1つの例は、jsonにシリアル化するときに完全な名前が空白になる場合です。私が次のようなことをしない限り:
func (u *User) SetFullName() string {
u.FullName = u.FirstName + " " + u.LastName
}
user.SetFullName()
// serialize to json and return an http response...
私はそれを自動的に行う方法があるのだろうかと思います。
type User struct {
FullName string `json:"-"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
func (u *User) MarshalJSON() ([]byte, error) {
type Alias User
return json.Marshal(&struct {
FullName string `json:"full_name"`
*Alias
}{
FullName: fmt.Sprintf("%s %s", u.FirstName, u.LastName),
Alias: (*Alias)(u),
})
}
遊び場::https://play.golang.org/p/M-CVqzTT7B
なぜ 'FullName'フィールドがありますか? – user2357112
@ user2357112私の質問が更新されました。 –
"このコード行が必要です:user.FullName to call ...":Goに "I want"はありません。 – Volker