如何用go检查空字符串类型?

时间:2019-04-17 10:38:33

标签: go

数据库:

Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `username` VARCHAR(255) UNIQUE, `password` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `users` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `tests` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) UNIQUE, `description` TEXT, `picture` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `tests` FROM `nrforms`

Executing (default): CREATE TABLE IF NOT EXISTS `questions` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `test_id` INTEGER, `testId` INTEGER, PRIMARY KEY (`id`), FOREIGN KEY (`test_id`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (`testId`) REFERENCES `tests` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `questions` FROM `nrforms`

使用gorm从数据库中获取记录,然后

column: name
value: NULL

错误:

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

是的,nil在go中用于int类型,但是在这种情况下,数据库中的值为invalid operation: name != nil (mismatched types string and nil) 而不是NULL,因此有必要检查"",该怎么做?

2 个答案:

答案 0 :(得分:2)

您应该注意sql类型:https://golang.org/pkg/database/sql/#NullString

只需在您的select语句中使用这种类型的变量:

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

然后您可以检查它是否有效,如果不是,则可以分配所需的任何值:

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

在gorm中,还可以选择NullString:

yourstr := dbmap.SelectNullStr("Select your string")

答案 1 :(得分:1)

您还可以使用指向字符串的指针来映射数据库中的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