如何在Golang中的空字符串字段中返回空值?

时间:2019-03-13 19:43:10

标签: go

我在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函数?

2 个答案:

答案 0 :(得分:1)

编辑:

根据oracle go driver docs,您无法执行以下操作:

  

sql.NullString

     不支持

sql.NullString:Oracle DB不   区分空字符串(“”)和NULL

原始答案:

需要有关您要连接的SQL数据库类型的更多详细信息。我知道go SQLite3 pkg-github.com/mattn/go-sqlite3-支持将nil设置为类型*string的值。

检查用于连接数据库的驱动程序的详细信息。例如,对于MySQL,默认情况下未设置将SQL日期字段放入go的本机time.Time结构类型-必须为turned on at the driver level

答案 1 :(得分:0)

在Go语言规范中,nil对于类型string无效。默认值为零,""

The top answer for this question goes into more detail.