>백엔드 개발 >Golang >Go의 GORM 라이브러리에서 'Unable to use type string as sql.NullString' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?

Go의 GORM 라이브러리에서 'Unable to use type string as sql.NullString' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 15:43:02560검색

Why does the error

"Unable to use type string as sql.NullString" 오류 이해

Go에서 gorm.Model은 다음 작업을 위한 기능을 제공합니다. SQL을 사용하는 데이터베이스. GORM을 사용하여 데이터베이스 모델을 생성할 때 해당 SQL 데이터 유형과 일치하도록 데이터 유형을 적절하게 선언해야 합니다. sql.NullString으로 선언된 필드에 문자열 값을 할당하려고 하면 "유형 문자열을 sql.NullString으로 사용할 수 없습니다." 오류가 발생합니다.

sql.NullString: A Struct, Not a String

sql.NullString 유형은 문자열 유형 자체가 아니라 구조체입니다. 이는 String(실제 문자열 값)과 Valid(문자열 값이 유효한지 또는 NULL인지를 나타내는 부울)의 두 필드로 구성됩니다.

sql.NullString을 올바르게 초기화

sql.NullString 값을 올바르게 초기화하려면 String 및 Valid 필드가 적절하게 설정된 sql.NullString 구조체를 제공하세요. 예:

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   sql.NullString{String: "a string goes here", Valid: true},
    Holyday:      false,
})</code>

대안: Null 허용 문자열 유형 정의

또는 sql.Scanner 및 드라이버를 구현하여 사용자 정의 null 허용 문자열 유형을 정의할 수 있습니다. Valuer 인터페이스. null 바이트를 활용하면 NULL 값을 알릴 수 있습니다.

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// Implement driver.Valuer to convert to database value
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// Implement sql.Scanner to convert from database value
func (s *MyString) Scan(src interface{}) error {
    // Handle different types
    switch v := src.(type) {
    case string:
        *s = MyString(v)
    case []byte:
        *s = MyString(v)
    case nil:
        *s = MyStringNull
    }
    return nil
}</code>

이 접근 방식을 사용하면 다음과 같이 사용자 정의 null 허용 문자열 유형을 사용할 수 있습니다.

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   "a string goes here", // implicitly converted to MyString
    Holyday:      false,
})</code>

참고: 사용자 정의 nullable 문자열 유형에 입력된 문자열 값을 할당할 때 명시적 변환이 필요할 수 있습니다.

위 내용은 Go의 GORM 라이브러리에서 'Unable to use type string as sql.NullString' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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