为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建不同类型的结构数组数组?

如何创建不同类型的结构数组数组?

Go
哔哔one 2021-11-08 10:02:25
在我的程序中,我有 2 个模型:type User struct {    Name string}type Article struct {    Title string}我得到了这些结构的数据数组:users := []Userarticles := []Article我试图在同一段代码中迭代它们:models := [][]interface{} {users, articles}for _, model := range models {    log.Printf("%#v", model)}但我收到一个错误:cannot use users (type []User) as type []interface {} in array element我究竟做错了什么?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

你应该使用[]interface{}而不是[][]interface{}

Try it ongo playground


如果要迭代内部数组中的所有结构,则需要将它们转换为正确的类型,然后进行迭代,如下所示:


for _, model := range models {

    if u, ok := model.([]User); ok {

        for _, innerUser := range u {

            log.Printf("%#v", innerUser)

        }

    }

    if a, ok := model.([]Article); ok {

        for _, innerArticle := range a {

            log.Printf("%#v", innerArticle)

        }

    }

}

试试吧 go playground


查看完整回答
反对 回复 2021-11-08
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

也许我没有得到你的要求,但只是有什么问题


models := []interface{} {users, articles}

for _, model := range models {

    log.Printf("%#v\n", model)

}


查看完整回答
反对 回复 2021-11-08
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

如何使用接口来解决您的问题?您甚至可以使用默认fmt.Stringer接口,使用 byfmt.Prtinf和其他标准方法。


例子:


package main


import "log"

import "fmt"


type User struct {

    Name string

}


type Article struct {

    Title string

}


func (art Article) String() string {

    return art.Title

}


func (user User) String() string {

    return user.Name

}


func main() {

    models := []interface{}{User{"user1"}, User{"user2"}, Article{"article1"}, Article{"article2"}}

    for _, model := range models {

        printable := model.(fmt.Stringer)

        log.Printf("%s\n", printable)

    }

}

游乐场:https : //play.golang.org/p/W3qakrMfOd


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信