【发布时间】:2019-08-04 14:42:14
【问题描述】:
我在 Golang 应用程序中有这样的struct:
type Employee struct {
ID int `json:"employee_id"`
Email *string `json:"employee_email"`
LastName *string `json:"employee_last_name"`
FirstName *string `json:"employee_first_name"`
Sex *string `json:"employee_sex"`
}
此结构的某些字符串字段可以为空。如果我使用*string 应用程序返回我""。如果使用sql.NullString,它会返回例如这样的结果:
"employee_last_name": {
String: "",
Valid: true
}
我想显示null 是字符串字段为空。
在documentation我找到了这样的代码:
type NullString struct {
String string
Valid bool
}
func (ns *NullString) Scan(value interface{}) error {
if value == nil {
ns.String, ns.Valid = "", false
return nil
}
ns.Valid = true
return convertAssign(&ns.String, value)
}
func (ns NullString) Value() (driver.Value, error) {
if !ns.Valid {
return nil, nil
}
return ns.String, nil
}
据我了解,这段代码可以帮助我解决问题,对吧?!我需要在我的应用程序中导入什么才能使用convertAssign 函数?
【问题讨论】:
-
我假设您是从 SQL 源获取数据?并且有问题的表数据有一个空值,您知道为什么空值不显示为
gonil值?这是对您问题的正确评估吗? -
如果是 SQL - 请发布数据库驱动程序。 MySQL、SQLite 等?在 RowScan 期间,可能需要启用驱动程序选项以支持 NULL 值。
-
@colminator 你好!是的,你是对的。例如,我注意到
*int回复了我null。为什么*string只回复我""而不是null。事实上,在数据库中,column 具有空值。我可以更改此默认行为吗? -
@colminator 请注意,这与
goracle无关,正如您已经通过引用文档在答案中指出的那样,这是oracle 本身的问题,而不是驱动程序的问题。如果 oracle 在内部将空字符串更改为 NULL,则驱动程序的作者几乎无能为力。还有stackoverflow.com/a/13278879/965900 -
@colminator 没有人说 oracle db 不支持 NULL。
标签: go