如何从 Go 中的 for 循环返回接口列表?
在Go语言中,我们可以通过for循环来遍历数组、切片、映射等数据结构。但是,有时候我们需要在循环中返回一个接口列表。这是一个常见的需求,因为接口是一种抽象类型,可以代表多种具体类型。本文将介绍如何在Go中使用for循环返回接口列表。首先,我们需要理解Go中的接口类型和类型断言的概念。
问题内容
如何从 go 中的 for 循环返回接口列表? 假设我有如下数据:
id | name | project_type |
---|---|---|
1 | project_name | 1 |
2 | project_name | 1 |
3 | project_name | 1 |
4 | project_name | 2 |
5 | project_name | 2 |
6 | project_name | 3 |
7 | project_name | 3 |
8 | project_name | 3 |
9 | project_name | 4 |
10 | project_name | 4 |
我可以使用下面的go代码来获取project_type=1和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
}
但是现在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大于2,我必须获取一个interface{}列表,我尝试重写如下代码,但我不知道下一步该怎么写,如何从go中的for循环返回接口列表?非常感谢您的建议。
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
}
解决方法
如果您希望每个project_type有10个结果(全部10*n个结果):
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
}
如果所有类型总共有 10 个结果:
i write it if you need it
以上就是如何从 Go 中的 for 循环返回接口列表?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341