Как проверить тип нулевой строки с помощью go?

#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. golang.org/pkg/database/sql/#NullString

Ответ №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