How to return a list of interfaces from a for loop in Go?

王林
Release: 2024-02-09 12:10:18
forward
336 people have browsed it

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

In Go language, we can traverse data structures such as arrays, slices, and maps through for loops. However, sometimes we need to return a list of interfaces in a loop. This is a common requirement because an interface is an abstract type that can represent multiple concrete types. This article will introduce how to use a for loop in Go to return a list of interfaces. First, we need to understand the concepts of interface types and type assertions in Go.

Question content

How to return the interface list from a for loop in go? Suppose I have the following data:

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

I can use the following go code to get two lists of project_type=1 and 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
}
Copy after login

But now the data of project_type is 's 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 is greater than 2, I must get an interface{} list, I tried to rewrite the code as below, but I don't know what to write next, how to return the interface list from a for loop in go? Thank you for your suggestion.

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

}
Copy after login

Solution

If you want 10 results per project_type (all 10*n results):

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
}
Copy after login

If there are a total of 10 results for all types:

i write it if you need it
Copy after login

The above is the detailed content of How to return a list of interfaces from a for loop in Go?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!