> 백엔드 개발 > Golang > Golang에서 GORM을 사용하여 사용자 정의 세트 데이터 유형을 유지하는 방법은 무엇입니까?

Golang에서 GORM을 사용하여 사용자 정의 세트 데이터 유형을 유지하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-19 09:18:02
원래의
376명이 탐색했습니다.

How to Persist Custom Set Data Types with GORM in Golang?

GORM Golang을 사용하여 사용자 정의 Set 데이터 유형 유지

제공된 코드 샘플은 GORM 라이브러리를 사용하여 사용자 정의 Set 데이터 유형을 유지하는 문제를 보여줍니다. 골랑에서. 사용자 정의 유형은 스레드가 안전하지 않으며 문자열 세트를 나타냅니다. GORM을 사용하여 이 Set 유형이 포함된 구조체를 MySQL에 유지하려고 하면 Set 유형이 MySQL에 대해 유효하지 않음을 나타내는 오류가 발생합니다.

이 문제를 해결하려면 사용자 정의에서 특정 메서드를 구현해야 합니다. 데이터베이스 상호 작용을 활성화하도록 유형을 설정합니다. 이러한 메서드는 다음과 같습니다.

  • Value(): Set 유형을 JSON 인코딩 문자열과 같은 데이터베이스 호환 값으로 변환합니다.
  • Scan(): 검색된 데이터베이스에서 세트 유형을 채웁니다. value.

이러한 메소드를 구현함으로써 GORM 라이브러리는 데이터 지속성 동안 사용자 정의 Set 유형을 효과적으로 처리할 수 있습니다. 다음은 제공된 threadUnsafeSet에 대해 이러한 메서드를 구현할 수 있는 방법에 대한 예입니다.

type threadUnsafeSet map[interface{}]struct{}

func (set *threadUnsafeSet) Value() (driver.Value, error) {
    return json.Marshal(set), nil
}

func (set *threadUnsafeSet) Scan(value interface{}) error {
    switch value := value.(type) {
    case []byte:
        return json.Unmarshal(value, set)
    }
    return errors.New("unrecognized value type")
}
로그인 후 복사

Value() 메서드는 threadUnsafeSet를 JSON 인코딩 문자열로 변환하는 반면 Scan() 메서드는 JSON을 역정렬화합니다. 문자열을 threadUnsafeSet으로 다시 보냅니다.

이러한 메소드를 사용하면 사용자 정의 Set 데이터 유형을 GORM과 함께 데이터용으로 효과적으로 사용할 수 있습니다. 끈기. 사용 중인 데이터베이스의 특정 요구 사항에 따라 Value() 및 Scan() 메서드를 구현하는 것이 중요합니다.

위 내용은 Golang에서 GORM을 사용하여 사용자 정의 세트 데이터 유형을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿