我正在尝试使用数据库/sql 和 mysql 驱动程序构建 API,它将根据 URL 参数读取数据。
像这样的东西
myapi.com/users?columns=id,first_name,last_name,country&sort=desc&sortColumn=last_name&limit=10&offset=20
Run Code Online (Sandbox Code Playgroud)
我知道如何在结构中定义时获取所有列或仅获取特定列。但我想知道是否可以从 url 获取列,而不是将其保存到映射中,而不是预定义的结构,而不仅仅是扫描这些列。
我有工作代码,仅当列数与结构中的列数相同时,才会从上述端点获取数据。country例如,如果我删除,我会收到错误,Scan需要 4 个参数,但给出了 3 个参数。
我不需要特定的代码,只需要一些指导,因为我正在学习 Go,而且我的背景是 PHP,这更容易做到。
更新
感谢答案,我有了部分有效的解决方案。
这是代码:
cols := []string{"id", "first_name", "last_name"}
vals := make([]interface{}, len(cols))
w := map[string]interface{}{"id": 105}
var whereVal []interface{}
var whereCol []string
for k, v := range w {
whereVal = append(whereVal, v)
whereCol = append(whereCol, fmt.Sprintf("%s = ?", k))
}
for i := range cols {
vals[i] = new(interface{})
}
err := db.QueryRow("SELECT "+strings.Join(cols, ",")+" …Run Code Online (Sandbox Code Playgroud)