Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengembalikan senarai antara muka dari gelung for dalam Go?

Bagaimana untuk mengembalikan senarai antara muka dari gelung for dalam Go?

王林
王林ke hadapan
2024-02-09 12:10:18327semak imbas

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

Dalam bahasa Go, kita boleh merentasi struktur data seperti tatasusunan, kepingan dan peta melalui untuk gelung. Walau bagaimanapun, kadangkala kita perlu mengembalikan senarai antara muka dalam satu gelung. Ini adalah keperluan biasa kerana antara muka ialah jenis abstrak yang boleh mewakili pelbagai jenis konkrit. Artikel ini akan memperkenalkan cara menggunakan gelung for dalam Go untuk mengembalikan senarai antara muka. Pertama, kita perlu memahami konsep jenis antara muka dan penegasan jenis dalam Go.

Kandungan soalan

Bagaimana untuk mengembalikan senarai antara muka daripada gelung for in go? Katakan saya mempunyai data berikut:

id nama jenis_projek
1 nama_projek 1
2 nama_projek 1
3 nama_projek 1
4 nama_projek 2
5 nama_projek 2
6 nama_projek 3
7 nama_projek 3
8 nama_projek 3
9 nama_projek 4
10 nama_projek 4

Saya boleh menggunakan kod go berikut untuk mendapatkan dua senarai project_type=1 dan 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
}

Tetapi kini data project_type ialah 的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 lebih besar daripada 2, saya perlu mendapatkan senarai antara muka{}, saya cuba menulis semula kod berikut, tetapi saya tidak tahu apa yang perlu ditulis seterusnya, bagaimana untuk mengembalikan senarai antara muka dari gelung for in go? Terima kasih banyak atas nasihat anda.

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

}

Penyelesaian

Jika anda mahukan 10 hasil setiap projek_jenis (semua 10*n hasil):

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
}

Sekiranya terdapat 10 keputusan kesemuanya merentas semua jenis:

i write it if you need it

Atas ialah kandungan terperinci Bagaimana untuk mengembalikan senarai antara muka dari gelung for dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam