首页 >后端开发 >Golang >如何从 Go 中的 for 循环返回接口列表?

如何从 Go 中的 for 循环返回接口列表?

王林
王林转载
2024-02-09 12:10:18385浏览

如何从 Go 中的 for 循环返回接口列表?

在Go语言中,我们可以通过for循环来遍历数组、切片、映射等数据结构。但是,有时候我们需要在循环中返回一个接口列表。这是一个常见的需求,因为接口是一种抽象类型,可以代表多种具体类型。本文将介绍如何在Go中使用for循环返回接口列表。首先,我们需要理解Go中的接口类型和类型断言的概念。

问题内容

如何从 go 中的 for 循环返回接口列表? 假设我有如下数据:

id name project_type
1 project_name 1
2 project_name 1
3 project_name 1
4 project_name 2
5 project_name 2
6 project_name 3
7 project_name 3
8 project_name 3
9 project_name 4
10 project_name 4

我可以使用下面的go代码来获取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的数据是的json[{"project_type":1,"name":"something else"},{"project_type":2,"name":"something else"},{ "project_type":3,"name":"something else"},{"project_type":4,"name":"something else"}],project_type大于2,我必须获取一个interface{}列表,我尝试重写如下代码,但我不知道下一步该怎么写,如何从go中的for循环返回接口列表?非常感谢您的建议。

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

}

解决方法

如果您希望每个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

以上是如何从 Go 中的 for 循环返回接口列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除