GORM으로 임베디드 구조체 저장
GORM 및 임베디드 구조체로 작업할 때 GORM이 이러한 구조를 처리하는 방법을 이해하는 것이 중요합니다. 예를 들어 다음 구조체를 고려해보세요.
type A struct { point GeoPoint } type GeoPoint struct { Lat float64 Lon float64 }
기본적으로 GORM은 내장된 구조체(GeoPoint)에 대해 별도의 테이블을 생성하려고 시도하지만 이는 바람직하지 않을 수 있습니다. 구조체를 동일한 테이블 내의 필드로 포함하려면 열 태그를 사용하여 GORM에 수동으로 지시해야 합니다.
해결책:
삽입된 구조체를 다른 구조체로 저장하려면 필드에 포함된 구조체 필드에 gorm:"column:..." 태그를 추가합니다. 예를 들면 다음과 같습니다.
type A struct { GORMModel Point GeoPoint `gorm:"embedded;column:point"` }
embedded 옵션을 설정하면 GORM은 포함된 구조체를 인식하고 A 테이블에 point라는 새 필드를 생성합니다. 열 옵션을 사용하면 필드에 대한 사용자 정의 이름을 지정할 수 있습니다.
JSON 마샬링/비마샬링을 위한 대체 솔루션:
이 수정된 솔루션을 사용하면 필드의 자동 마샬링/비마샬링이 가능합니다. 구조체를 JSON 열로 포함합니다.
type Child struct { Lat float64 Lng float64 } type ChildArray []Child func (sla *ChildArray) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), &sla) } func (sla ChildArray) Value() (driver.Value, error) { val, err := json.Marshal(sla) return string(val), err } type Parent struct { GORMModel Childrens ChildArray `gorm:"column:childrens;type:longtext"` }
이 접근 방식은 Childrens 배열을 childrens 열에 JSON 인코딩 문자열로 저장합니다. 데이터를 검색할 때 GORM은 자동으로 JSON 문자열을 Childrens 배열로 역마샬링합니다.
위 내용은 GORM으로 임베디드 구조체를 저장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!