首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Golang中迭代struct中的一个片段,或者是否可以在struct中使用for循环?

如何在Golang中迭代struct中的一个片段,或者是否可以在struct中使用for循环?
EN

Stack Overflow用户
提问于 2020-06-16 04:02:09
回答 1查看 306关注 0票数 2

我有两个结构体。一个是为了彩票,一个是为了奖励。我正在使用Mysql数据库。我想从数据库中读取数据,并以JSON格式写入。我能够做到这一点,但我希望有一个嵌套的结构,其中我想迭代奖券结构内的奖励结构。我能这么做吗?

这是我的彩票和奖励结构

代码语言:javascript
复制
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"`
}

这是我的密码

代码语言:javascript
复制
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())
            }

                rew := Lottery{
                Id:          id1,
                Lottery:     lottery_name,
                Description: lottery_description,
                Reward : []Rew{Rew{
                    Id:          id,
                    RewardName:  reward_name,
                    Description: reward_description,
                    Asset:       reward_asset,
                    AssetName:   reward_asset_name,
                },
                },
            }

            ctx.JSON(&rew)
        }


    })

当我使用上面的函数时,我得到的JSON格式如下

代码语言:javascript
复制
{
    "lottery_id": 7,
    "lottery_name": "lottery2",
    "lottery_description": "lottery for 7",
    "rewards": [
        {
            "reward_id": 9,
            "reward_name": "Reward3",
            "reward_description": "Reward for lottery 7",
            "reward_asset": 20,
            "reward_asset_name": "AC"
        }
    ]
}{
    "lottery_id": 7,
    "lottery_name": "lottery2",
    "lottery_description": "lottery for 7",
    "rewards": [
        {
            "reward_id": 10,
            "reward_name": "Reward5",
            "reward_description": "Reward for lottery 7",
            "reward_asset": 15,
            "reward_asset_name": "AC"
        }
    ]
}

但我想把JSON作为

代码语言:javascript
复制
{
"lottery_id":7,
"lottery_name":"lottery2"
"lottery_description":"lottery for 7"
"rewards":[
    {
        "reward_id":9,
        "reward_name": "Reward3",
        "reward_description": "Reward for lottery 7",
        "reward_asset": 20,
        "reward_asset_name": "ABC"
    },
    {   "reward_id":10,
        "reward_name": "Reward5",
        "reward_description": "Reward for lottery 7",
        "reward_asset": 15,
        "reward_asset_name": "ABC"
    },
    {   "reward_id":11,
        "reward_name": "Reward7",
        "reward_description": "Reward for lottery 7",
        "reward_asset": 10,
        "reward_asset_name": "ABC"
    }
    ]
}

如何在结构中迭代?结构中是否可能有for循环?或者有其他方法可以像上面那样获得JSON吗?

请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 04:10:43

就像这样:

代码语言:javascript
复制
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)
})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62400721

复制
相关文章

相似问题

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