go如何往数据库中插入null

利用gorm

gorm执行原生sql,如果是查询的话,用Raw(),否则用Exec()。

插入数据:

初始化一个指向gorm.DB实例的指针后,调用此指针的Exec()方法

// Exec execute raw sql
func (db *DB) Exec(sql string, values ...interface{}) (tx *DB) {
    tx = db.getInstance()
    tx.Statement.SQL = strings.Builder{}

    if strings.Contains(sql, "@") {
        clause.NamedExpr{SQL: sql, Vars: values}.Build(tx.Statement)
    } else {
        clause.Expr{SQL: sql, Vars: values}.Build(tx.Statement)
    }

    tx.callbacks.Raw().Execute(tx)
    return
}

id := 1

name := "张三"

age := 18

city := ""

数据库中,city字段值不想存空字符串,想存null,如何搞?可以利用go自带的sql包中的NullString类型。

自定义一个函数,用于根据string生成NullString。实际上,go本应该自带这个方法的,无奈go基础包并不完善。

func NewNullString(s string) sql.NullString {
    if len(s) == 0 {
        return sql.NullString{}
    }
    return sql.NullString{
        String: s,
        Valid:  true,
    }
}

然后Exec方法中,

db.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city))

详细代码是:

if err := dao.DB.Exec("insert into t_a (id, name, age, city) values (?, ?, ?, ?)", id, name, age, NewNullString(city)).Error; err != nil {
    log.Logger.Panic("插入t_a失败", err)
}

利用原生的database/sql包和利用gorm同理,略。

原文地址:https://www.cnblogs.com/koushr/p/14145536.html