>백엔드 개발 >Golang >GORM의 다른 구조체 내에 구조체를 삽입하고 이를 기본 테이블의 필드로 저장하려면 어떻게 해야 합니까?

GORM의 다른 구조체 내에 구조체를 삽입하고 이를 기본 테이블의 필드로 저장하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 03:20:03973검색

How do I embed a struct within another struct in GORM and store it as a field in the main table?

GORM을 사용하여 구조체 포함

GORM에서 구조체를 다른 구조체에 포함할 때 GORM은 포함된 구조체에 대해 별도의 테이블을 생성할 수 있습니다. 그러나 포함된 구조체를 기본 테이블 내의 추가 필드로 저장하려면 다음 접근 방식을 활용할 수 있습니다.

해결책:

  1. 정의 포함된 구조체:
<code class="go">type A struct {
    Point *GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}</code>
  1. 포함된 구조체에 대한 sql.Scanner 및 드라이버.Valuer 인터페이스 구현:
<code class="go">func (gp *GeoPoint) Scan(src interface{}) error {

    // Convert the `src` value to a byte array.
    b, ok := src.([]byte)
    if !ok {
        return fmt.Errorf("could not convert to byte array")
    }

    // Unmarshal the byte array into the `GeoPoint` struct.
    if err := json.Unmarshal(b, gp); err != nil {
        return fmt.Errorf("could not unmarshal JSON: %v", err)
    }

    return nil
}

func (gp GeoPoint) Value() (driver.Value, error) {

    // Marshal the `GeoPoint` struct into a byte array.
    b, err := json.Marshal(gp)
    if err != nil {
        return nil, fmt.Errorf("could not marshal JSON: %v", err)
    }

    return string(b), nil
}</code>
  1. 업데이트 gorm:"column" 및 gorm:"type" 태그가 있는 내장 구조체를 사용하기 위한 GORM 모델:
<code class="go">type A struct {
    gorm.Model
    Point *GeoPoint `gorm:"column:point;type:json"`
}</code>

Scan 및 Value 메소드를 구현함으로써 GORM은 내장 구조체를 다음으로 변환할 수 있습니다. 그리고 JSON 형식에서. gorm:"column" 및 gorm:"type" 태그는 기본 테이블 내에 포함된 구조체에 대한 열 이름과 데이터 유형을 지정합니다.

위 내용은 GORM의 다른 구조체 내에 구조체를 삽입하고 이를 기본 테이블의 필드로 저장하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.