Heim >Backend-Entwicklung >Golang >Wie kann ich eine Liste von Schnittstellen aus einer for-Schleife in Go zurückgeben?
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.
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 }
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 }
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 }
Wenn es insgesamt 10 Ergebnisse über alle Arten gibt:
i write it if you need it
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!