En langage Go, nous pouvons parcourir des structures de données telles que des tableaux, des tranches et des cartes à travers des boucles for. Cependant, nous devons parfois renvoyer une liste d’interfaces dans une boucle. Il s'agit d'une exigence courante car une interface est un type abstrait qui peut représenter plusieurs types concrets. Cet article explique comment utiliser une boucle for dans Go pour renvoyer une liste d'interfaces. Tout d’abord, nous devons comprendre les concepts de types d’interface et d’assertions de type dans Go.
Comment renvoyer une liste d'interfaces à partir d'une boucle for en go ? Supposons que j'ai les données suivantes :
id | nom | project_type |
---|---|---|
1 | nom_projet | 1 |
2 | nom_projet | 1 |
3 | nom_projet | 1 |
4 | nom_projet | 2 |
5 | nom_projet | 2 |
6 | nom_projet | 3 |
7 | nom_projet | 3 |
8 | nom_projet | 3 |
9 | nom_projet | 4 |
10 | nom_projet | 4 |
Je peux utiliser le code go suivant pour obtenir deux listes de project_type=1 et 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 }
Mais maintenant les données de project_type sont 的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 est supérieur à 2, je dois obtenir une liste d'interface{}, j'essaie de réécrire le code suivant, mais je ne sais pas quoi écrire ensuite, comment renvoyer le liste d'interfaces de la boucle for en go ? Merci pour votre 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 }
Si vous souhaitez 10 résultats par type de projet (tous les 10*n résultats) :
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 }
S'il y a 10 résultats au total tous types confondus :
i write it if you need it
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!