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

在我的程序中,我有 2 个模型:


type User struct {

    Name string

}


type Article struct {

    Title string

}

我得到了这些结构的数据数组:


users := []User

articles := []Article

我试图在同一段代码中迭代它们:


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

for _, model := range models {

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

}

但我收到一个错误:


cannot use users (type []User) as type []interface {} in array element

我究竟做错了什么?


哔哔one
浏览 205回答 3
3回答

Helenr

你应该使用[]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

犯罪嫌疑人X

也许我没有得到你的要求,但只是有什么问题models := []interface{} {users, articles}for _, model := range models {    log.Printf("%#v\n", model)}

慕工程0101907

如何使用接口来解决您的问题?您甚至可以使用默认fmt.Stringer接口,使用 byfmt.Prtinf和其他标准方法。例子:package mainimport "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go