Wie kann ich eine Liste von Schnittstellen aus einer for-Schleife in Go zurückgeben?

王林
Freigeben: 2024-02-09 12:10:18
nach vorne
337 Leute haben es durchsucht

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

In der Go-Sprache können wir Datenstrukturen wie Arrays, Slices und Maps durch for-Schleifen durchlaufen. Manchmal müssen wir jedoch eine Liste von Schnittstellen in einer Schleife zurückgeben. Dies ist eine häufige Anforderung, da eine Schnittstelle ein abstrakter Typ ist, der mehrere konkrete Typen darstellen kann. In diesem Artikel wird erläutert, wie Sie eine for-Schleife in Go verwenden, um eine Liste von Schnittstellen zurückzugeben. Zunächst müssen wir die Konzepte von Schnittstellentypen und Typzusicherungen in Go verstehen.

Frageninhalt

Wie gebe ich eine Liste von Schnittstellen aus einer for-Schleife in go zurück? Angenommen, ich habe die folgenden Daten:

id Name Projekttyp
1 Projektname 1
2 Projektname 1
3 Projektname 1
4 Projektname 2
5 Projektname 2
6 Projektname 3
7 Projektname 3
8 Projektname 3
9 Projektname 4
10 Projektname 4

Ich kann den folgenden Go-Code verwenden, um zwei Listen mit project_type=1 und project_type=2 zu erhalten,

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
}
Nach dem Login kopieren

Aber jetzt sind die Daten von 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 ist größer als 2, ich muss eine Liste von interface{} abrufen, ich versuche den folgenden Code neu zu schreiben, weiß aber nicht, was ich als nächstes schreiben soll und wie ich das zurückgeben soll Schnittstellenliste aus der for-Schleife in go? Danke für deinen Vorschlag.

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

}
Nach dem Login kopieren

Workaround

Wenn Sie 10 Ergebnisse pro Projekttyp wünschen (alle 10*n Ergebnisse):

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
}
Nach dem Login kopieren

Wenn es insgesamt 10 Ergebnisse über alle Arten gibt:

i write it if you need it
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste von Schnittstellen aus einer for-Schleife in Go zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!