#go
# #Вперед
Вопрос:
DB:
column: name
value: NULL
Получите запись из базы данных с помощью gorm, затем
var name string
if name != nil {
//
}
Ошибка:
invalid operation: name != nil (mismatched types string and nil)
Да, nil используется для типа int в go, но в этом случае значение в DB равно NULL
, но нет ""
, поэтому необходимо проверить null
, как это сделать?
Комментарии:
Ответ №1:
Вам следует обратить внимание на типы sql: https://golang.org/pkg/database/sql/#NullString
Просто используйте переменную с этим типом в вашем операторе select:
var yourstr sql.NullString
db.Select("Select your string", amp;yourstr)
Затем вы можете проверить, является ли он допустимым, и если это не так, вы можете присвоить любое значение, которое хотите:
if !yourstr.Valid{
yourstr.String = ""
}
В gorm также есть функция для выбора NullString:
yourstr := dbmap.SelectNullStr("Select your string")
Ответ №2:
Вы также можете использовать указатель на строку для сопоставления нулевых значений из базы данных, но это создаст случаи, когда вы не сможете указывать значения, не создав сначала переменную.
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