Как проверить нулевой тип строки с помощью Go? - PullRequest
0 голосов
/ 17 апреля 2019

DB:

column: name
value: NULL

Получить запись из БД с помощью gorm, затем

var name string
if name != nil {
  //
}

Ошибка:

invalid operation: name != nil (mismatched types string and nil)

Да, nil используется для типа int в go, но в этом случае значение в БД равно NULL, но не "", поэтому необходимо проверить null, как это сделать?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Вы должны обратить внимание на типы sql: https://golang.org/pkg/database/sql/#NullString

Просто используйте переменную с этим типом в вашем операторе выбора:

var yourstr sql.NullString
db.Select("Select your string", &yourstr)

Тогда вы можете проверить, является ли он действительным иесли это не так, вы можете присвоить любое желаемое значение:

if !yourstr.Valid{
  yourstr.String = ""
}

В gorm также есть функция для выбора NullString:

yourstr := dbmap.SelectNullStr("Select your string")
1 голос
/ 17 апреля 2019

Вы также можете использовать указатель на строку для отображения значений NULL из базы данных, но это создаст случаи, когда вы не можете задавать значения, не создавая сначала переменную.

var name *string
if name != nil {
  //
}

// but
name = "will not work"

Или вы можете использовать реализации пакетов github.com/go-sql-driver/mysql (или любой другой драйвер, который вы используете) и database/sql.Вы можете определить свои собственные типы на основе тех, если вы хотите добавить функциональность:

// NullInt64 is an alias for sql.NullInt64 data type
type NullInt64 sql.NullInt64
// NullBool is an alias for sql.NullBool data type
type NullBool sql.NullBool
// NullFloat64 is an alias for sql.NullFloat64 data type
type NullFloat64 sql.NullFloat64
// NullString is an alias for sql.NullString data type
type NullString sql.NullString
// NullTime is an alias for mysql.NullTime data type
type NullTime mysql.NullTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...