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

王林
Lepaskan: 2024-02-09 12:10:18
ke hadapan
337 orang telah melayarinya

如何从 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
}
Salin selepas log masuk

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

}
Salin selepas log masuk

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
}
Salin selepas log masuk

Sekiranya terdapat 10 keputusan kesemuanya merentas semua jenis:

i write it if you need it
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!