为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 的结构中迭代切片,或者是否可以在结构中使用 for 循环?

如何在 Golang 的结构中迭代切片,或者是否可以在结构中使用 for 循环?

Go
三国纷争 2022-06-13 10:41:37
我有两个结构。一种用于彩票,一种用于奖励。我正在使用 Mysql 数据库。我想从数据库中读取数据并以 JSON 格式写入。我可以做到这一点,但我想要一个嵌套结构,我想在 Lottery 结构中迭代 Reward 结构。我可以这样做吗?这是我的彩票和奖励结构type Lottery struct{    Id int `json:"lottery_id"`    Lottery string `json:"lottery_name"`    Description string `json:"lottery_description"`    Reward []Rew `json:"rewards"`}type Rew struct{    Id int `json:"reward_id"`    RewardName string `json:"reward_name"`    Description string `json:"reward_description"`    Asset int `json:"reward_asset"`    AssetName string `json:"reward_asset_name"`}这是我的代码app.Get("/lottery/{id:int}", func (ctx iris.Context){        id1 := ctx.Params().GetIntDefault("id",0)        stmtOut, err := db.Prepare("select lottery_name, lottery_description from lottery_table where id = ?")        if err !=nil{            panic(err.Error())        }        defer stmtOut.Close()        var lottery_name, lottery_description string        err1 := stmtOut.QueryRow(id1).Scan(&lottery_name,&lottery_description)        if err != nil{            panic(err1.Error())        }        stmtOut1, err := db.Query("select id, reward_name, reward_description, reward_asset, reward_asset_name from rewards_table where lottery_id = ?",id1)        if err != nil{            panic(err.Error())        }        defer stmtOut1.Close()        for stmtOut1.Next() {            var id, reward_asset int            var reward_name, reward_description, reward_asset_name string            err2 := stmtOut1.Scan(&id, &reward_name, &reward_description, &reward_asset, &reward_asset_name)            if err2 != nil {                panic(err.Error())            }如何在结构中迭代?结构中是否可以有 for 循环?还是有任何其他方法可以让我得到上面的 JSON?请帮我。
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

像这样的东西:


app.Get("/lottery/{id:int}", func(ctx iris.Context) {

    id1 := ctx.Params().GetIntDefault("id", 0)


    stmtOut, err := db.Prepare("select lottery_name, lottery_description from lottery_table where id = ?")

    if err != nil {

        panic(err.Error())

    }

    defer stmtOut.Close()


    lot := Lottery{Id: id1}

    err1 := stmtOut.QueryRow(id1).Scan(&lot.Lottery, &lot.Description)

    if err != nil {

        panic(err1.Error())

    }


    stmtOut1, err := db.Query("select id, reward_name, reward_description, reward_asset, reward_asset_name from rewards_table where lottery_id = ?", id1)

    if err != nil {

        panic(err.Error())

    }

    defer stmtOut1.Close()


    for stmtOut1.Next() {

        rew := Rew{}

        err2 := stmtOut1.Scan(&rew.Id, &rew.RewardName, &rew.Description, &rew.Asset, &rew.AssetName)

        if err2 != nil {

            panic(err.Error())

        }

        lot.Reward = append(lot.Reward, rew)


    }

    ctx.JSON(lot)

})


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信