내 패키지에 다음과 같은 구조체가 있습니다.부모 내장 구조체 필드 값을 가져 오는 방법은 무엇입니까?
type Animal struct {
Id string
// and some more common fields
}
내 패키지를 사용하는 사용자는 자신의 Animal
을 구현할 수 있어야합니다. 내 메소드 중 하나에서 Id
이 필요하므로 사용자는 내 구조체를 임베드해야합니다. 내 패키지에서
type Dog struct {
Animal
Name string
Legs int
}
나는 데이터베이스에 Animal
의를 저장하는 save()
기능을 가지고있다. 사용자의 유형을 모르므로 인수 유형으로 interface{}
을 사용해야합니다. 내 질문은 : Id
(부모 구조체 Animal
)에서 어떻게 얻을 수 있습니까? 지금은 JSON 파싱 및 언 마샬링을 사용하지만이 방법이 있습니까?
func put(doc interface{}) error {
res, err := json.Marshal(doc)
if err != nil {
return err
}
var animal *Animal
err = json.Unmarshal(res, &animal)
if err != nil {
return err
}
fmt.Println(animal.Id) // finally I have the Id
// ...
}
당신이 순서에 인터페이스를 추가 할 수 있습니다 어쩌면
func main() {
bello := Dog{
Animal: Animal{
Id: "abcd1234",
},
Name: "bello",
Legs: 4,
}
err := put(bello)
// ...
}
'저장 (AnimalGetter)'하고 캐스팅을 저장하지 않는 이유는 무엇입니까? –
@ Not_a_Golfer 확실하게, 나는 질문 ('put'또는 'save {interface {})'에서 언급 한 것과 같은 서명을 사용하고 있었고 제안에 따라 답변을 편집했습니다. – VonC
사소한 nitpick : getter가 있어야합니다. [Effective Go] (http://golang.org/doc/effective_go)에 따라'GetAnimal() '이 아니라'Animal()'이라고 불린다.html # Getters). –