Golang打印包含递归指针的结构体的二维切片

h43kikqp  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(188)

结构用户包含结构父指针结构oneUsers是结构用户片结构twoUsers是结构oneUsers片
两个用户-〉一个用户-〉用户-〉父用户
我尝试打印没有任何指针值的twoUsers

package main

import "fmt"

type parent struct {
    id int
}

type user struct {
    id     int
    name   string
    email  string
    parent *parent
}

func (u *user) String() string {
    if u == nil {
        return "nil"
    }
    return fmt.Sprintf("%#v", *u)
}

func (p *parent) String() string {
    if p == nil {
        return "nil"
    }
    return fmt.Sprintf("%#v", *p)
}

func (o *oneUsers) String() string {
    if o == nil {
        return "nil"
    }
    return fmt.Sprintf("%#v", *o)
}

type oneUsers []*user

type twoUsers []*oneUsers

func main() {
    var oneUser oneUsers
    p := parent{id: 6}
    oneUser = append(oneUser, &user{id: 1, name: "cooluser1", email: "cool.user1@gmail.com", parent: &p})
    oneUser = append(oneUser, &user{id: 2, name: "cooluser2", email: "cool.user2@gmail.com"})
    fmt.Printf("oneUser: %+v\n", oneUser)
    var twoUser twoUsers
    twoUser = append(twoUser, &oneUser)
    fmt.Printf("twoUser: %v\n", twoUser)
}

我试着在所有的结构体指针中添加String()函数,但是也打印指针值。

oneUser: [main.user{id:1, name:"cooluser1", email:"cool.user1@gmail.com", parent:(*main.parent)(0xc00001a120)} main.user{id:2, name:"cooluser2", email:"cool.user2@gmail.com", parent:(*main.parent)(nil)}]
twoUser: [main.oneUsers{(*main.user)(0xc000108150), (*main.user)(0xc000108180)}]
hfsqlsce

hfsqlsce1#

twoUser指向一个oneUser指针数组,所以当你想打印twoUser时,它只打印一些指针,如果你想打印twoUser中的oneUser值,把func (o *oneUsers) String() string方法修改成如下形式:

func (o *oneUsers) String() string {
    if o == nil {
        return "nil"
    }

    str := ""
    for _, user := range *o {
        if user == nil {
            return "nil"
        }
        str += fmt.Sprintf("%#v", *user)
    }
    return str
}

输出:

twoUser: [main.user{id:1, name:"cooluser1", email:"cool.user1@gmail.com", parent:(*main.parent)(0xc00001c0d8)}main.user{id:2, name:"cooluser2", email:"cool.user2@gmail.com", parent:(*main.parent)(nil)}]

相关问题