"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!