Home >Backend Development >Golang >How to Handle Nullable Strings in GORM Models?

How to Handle Nullable Strings in GORM Models?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 01:28:02893browse

How to Handle Nullable Strings in GORM Models?

Unable to Use String Type as sql.NullString

When creating a GORM model, you may encounter an error if you try to use a string type for a field that needs to be nullable. The issue arises when using sql.NullString for nullable fields.

Problem:

The error you're getting, "cannot use "a string goes here", (type string) as type sql.NullString in field value," indicates that you're trying to assign a string directly to a sql.NullString field. However, sql.NullString is not a string type, but a struct type designed to represent nullable strings.

Solution:

To resolve this issue, you need to initialize the sql.NullString field correctly. It should be initialized as:

<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>

Alternative Solution:

If you prefer using a simplified syntax for nullable strings, you can create your own nullable string type by implementing the sql.Scanner and driver.Valuer interfaces, and leveraging the null byte to signal a NULL value.

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// implements driver.Valuer, will be invoked automatically when written to the db
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// implements sql.Scanner, will be invoked automatically when read from the db
func (s *MyString) Scan(src interface{}) error {
    switch v := src.(type) {
    case string:
        *s = MyString(v)
    case []byte:
        *s = MyString(v)
    case nil:
        *s = MyStringNull
    }
    return nil
}</code>

With this type, you can initialize the Something field as follows:

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

The above is the detailed content of How to Handle Nullable Strings in GORM Models?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn