登录
首页 >  Golang >  Go问答

使用 SQLX 查询数据库中可能为空的字段

来源:stackoverflow

时间:2024-03-07 20:18:31 392浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《使用 SQLX 查询数据库中可能为空的字段》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在学习 go,并尝试创建一个具有“fields”参数的 api 端点。当我尝试将 sqlx 结果行扫描到结构中时,但是用户省略的字段将作为空字符串返回。有没有办法可以更改结构以仅反映用户传递的字段?我不认为我想使用 omitempty 例如 user_name 是一个空字符串。

type User struct {
    Id int `db:"id"`
    UserName string `db:"user_name"`
}


func GetUsers(w http.ResponseWriter,r *http.Request,db *sqlx.DB) {
    acceptedFields := map[string]bool {
        "id":true,
        "user_name":true,
    }
    var requestedFields string = "id"
    if r.URL.Query().Get("fields") != ""{
        requestedFields = r.URL.Query().Get("fields");
    }

    for _, requestedField := range strings.Split(requestedFields,",") {
        if !acceptedFields[requestedField] {
            http.Error(w, fmt.Sprintf("Unknown Field '%s'",requestedField), http.StatusBadRequest)
        }
    }

    users := []User{}

    err := db.Select(&users,fmt.Sprintf("SELECT %s FROM users",requestedFields)); 
    if err != nil {
        log.Fatal(err)
    }
    response, _ := json.Marshal(users)
    fmt.Fprintf(w,string(response))
}

最终端点输出

/users?fields=id => [{"id":12,"用户名":""}]

所需端点输出

/users?fields=id => [{"id":12}]

还使用 sql.nullstring 会导致以下结果:

[{"id":12,"username":{"string":"","valid":false}}]


解决方案


感谢 mkorpriva 这是一个解决方案

type User struct {
    Id int `db:"id"`
    UserName *string `db:"user_name" json:",omitempty"`
}

今天关于《使用 SQLX 查询数据库中可能为空的字段》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>