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.
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 }
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!