如何在Go语言中从for循环中返回接口列表?

rqdpfwrv  于 2023-03-21  发布在  Go
关注(0)|答案(1)|浏览(138)

在Go语言中如何从for循环中返回接口列表?假设我有如下数据:
| 身份证|姓名|项目类型|
| - ------|- ------|- ------|
| 1个|项目名称|1个|
| 第二章|项目名称|1个|
| 三个|项目名称|1个|
| 四个|项目名称|第二章|
| 五个|项目名称|第二章|
| 六个|项目名称|三个|
| 七|项目名称|三个|
| 八个|项目名称|三个|
| 九|项目名称|四个|
| 十个|项目名称|四个|
我可以使用下面的代码来获得project_type=1和project_type=2的两个列表,

func (d *db) ProjectList(Type, uid string, size uint64) (interface{}, interface{}, error) {
    type resp struct {
        Name            string  `json:"name"`
        Id             string  `json:"id"`
        ProjectType    string  `json:"project_type"`

    }

    var project_type_1 []*resp
    var project_type_2 []*resp

    sql = fmt.Sprintf(sql, where.String())
    _, err := d.ctx.DB().SelectBySql("select * from project where project_type=1 order by rand() limit 10").Load(&project_type_1)

    _, err = d.ctx.DB().SelectBySql("select * from project where project_type=2 order by rand() limit 10").Load(&project_type_2)
    return project_type_1, project_type_2, err
}

但是现在project_type的数据是[{"project_type":1,"name":"something else"},{"project_type":2,"name":"something else"},{"project_type":3,"name":"something else"},{"project_type":4,"name":"something else"}]的JSON,project_type大于2,我必须得到一个interface{}列表,我试着重写代码如下,但是我不知道下一步怎么写,如何从Go语言的for循环中返回interface列表?,非常感谢你的建议。

func NewProjectList(d *db) ([]interface{}, error) {
    var s = make([]ProjectType, 0)
    data, err := d.QueryString("project_type")
    if err != nil {
        return nil, err
    }

    err = json.Unmarshal([]byte(data), &s)
    if err != nil {
        return nil, err
    }

    for _, shortType := range s {
        fmt.Println("this is shortType", shortType)
    }
    return nil, err

}
p8h8hvxi

p8h8hvxi1#

如果希望每个project_type具有10个结果(全部10*n个结果):

func (d *db) ProjectList(Type, uid string, size uint64) ([]interface{}, error) {
    type resp struct {
        Name        string `json:"name"`
        Id          string `json:"id"`
        ProjectType string `json:"project_type"`
    }
    // get all types, you can get it from db
    // example: select DISTINCT ProjectType from project
    types := []string{"1", "2", "3", "4"}
    ans := []interface{}{}

    for _, sType := range types {
        var project_type []*resp
        sql = fmt.Sprintf(sql, where.String())
        _, err := d.ctx.DB().SelectBySql("select * from project where project_type=" + sType + " order by rand() limit 10").Load(&project_type)
        ans = append(ans, project_type)
    }
    return ans, nil
}

如果所有类型共10个结果:

i write it if you need it

相关问题