首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Golang API Gorilla MySQL查询

Golang API Gorilla MySQL查询
EN

Stack Overflow用户
提问于 2020-02-05 15:09:01
回答 1查看 70关注 0票数 0

所以..。我终于开始做我的副业了,其中包含超级书呆子桌面游戏“战锤”,我在其中创建了一个数据库MySQL,下一步就是创建一个API。

我现在有三张桌子……“霸王龙”,“灰骑兵”和“死亡卫士”。我想做一个动态查询来选择目标表。我能够做到这一点,但随着表的增长,我需要使其动态化。

代码语言:javascript
运行
复制
func getTyranids(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-type", "application/json")

var units []Unit

result, err := db.Query("SELECT * FROM tyranids")

if err != nil {
    panic(err.Error)
}

defer result.Close()

for result.Next() {
    var unit Unit
    err := result.Scan(&unit.ID, &unit.Name, &unit.Type, &unit.Movement, &unit.WeaponsSkill, &unit.BallisticSkill, &unit.Strength, &unit.Toughness, &unit.Wounds, &unit.Attacks, &unit.Leadership, &unit.Initiate, &unit.Points)
    if err != nil {
        panic(err.Error)
    }
    units = append(units, unit)
}
json.NewEncoder(w).Encode(units)

}

我怎样才能写出这样的代码,这样我就不需要每个表都有一个函数了?

我已经让它在每个单元上与mux.Vars一起工作。

代码语言:javascript
运行
复制
func getTyranidUnit(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")

params := mux.Vars(r)

result, err := db.Query("SELECT * FROM tyranids WHERE name = ?", params["name"])
if err != nil {
    panic(err.Error())
}
defer result.Close()

var unit Unit

for result.Next() {
    err := result.Scan(&unit.ID, &unit.Name, &unit.Type, &unit.Movement, &unit.WeaponsSkill, &unit.BallisticSkill, &unit.Strength, &unit.Toughness, &unit.Wounds, &unit.Attacks, &unit.Leadership, &unit.Initiate, &unit.Points)

    if err != nil {
        panic(err.Error())
    }
}
json.NewEncoder(w).Encode(unit)

}

代码语言:javascript
运行
复制
func main() {

db, err = sql.Open("mysql", "xx:xx@tcp(xxx)/Warhammer")

if err != nil {
    panic(err.Error())
}

defer db.Close()

router := mux.NewRouter().StrictSlash(true)

router.HandleFunc("/tyranids", getTyranids).Methods("GET")
router.HandleFunc("/tyranids/{name}", getTyranidUnit).Methods("GET")    

http.ListenAndServe(":8001", router)

}

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-02-05 16:31:35

您可以只创建一个map来将表与键配对:

代码语言:javascript
运行
复制
speciesUnitMap:= map[string]string{
    "Norn-Queen": "tyranids",
    "Hive Tyrant": "tyranids",
    "Rippers ": "tyranids",
    "Hive Ship": "tyranids",
‎    "Ork Boyz": "orcs",
    "‎Waaagh!": "orcs",
‎    "Warboss": "orcs",
    "‎Blood Axes" "orcs",

}


// This is dirty I would construct the string before 
// and do verifications that the received param is conform
result, err := db.Query("SELECT * FROM " + 
       speciesUnitMap[params["name"]] + " WHERE name = ?", params["name"])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60070559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档