作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在学习 Go 并尝试创建一个具有“字段”参数的 API 端点。当我尝试将 sqlx 结果行扫描到结构中时,但是用户省略的字段将作为空字符串返回。有没有办法可以更改结构以仅反射(reflect)用户传递的字段?我不认为我想使用 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,"UserName":""}]
所需的端点输出
/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"`
}
关于postgresql - 使用 SQLX 转到可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841547/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!