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

如何获取/打印数组指针切片的内容?

如何获取/打印数组指针切片的内容?

Go
www说 2022-04-20 21:07:15
我有以下结构和功能:type RayTrace struct {    gorm.Model    Var1   float64 `json:"var1"`    Var2   float64 `json:"var2"`    Var3   float64 `json:"var3"`    UserID uint    `json:"user_id"`}...// GetRaytracesFor functionfunc GetRaytracesFor(id uint) []*RayTrace {    raytraces := make([]*RayTrace, 0)    err := GetDB().Table("ray_traces").Where("user_id = ?", id).Last(&raytraces).Error    if err != nil {        return nil    }    return raytraces}如何获取/打印从 db 调用返回的数据?
查看完整描述

1 回答

?
HUH函数

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

我假设您在问如何打印指针切片的值,而不是地址。在这种情况下,使用fmt.Println(raytraces)orfmt.Printf("%v", raytraces) // or %+v or %#v将返回地址。


您可能希望看到类似的问题golang how to print struct value with pointer。


基本上,您需要手动打印这些字段。以下是一些不同的方法:


遍历切片并通过取消引用元素来打印值

func GetRaytracesFor(id uint) []*RayTrace {

    raytraces := make([]*RayTrace, 0)

    err := GetDB().Table("ray_traces").Where("user_id = ?", id).Last(&raytraces).Error

    if err != nil {

        return nil

    }


    for _, raytrace := range raytraces {

        // before dereferencing pointer, check if nil

        if raytrace == nil {

            fmt.Println("<nil>")

            continue

        }

        // notice the * before raytrace

        fmt.Printf("%+v\n", *raytrace)

    }

    return raytraces

}

制作类型RayTrace工具fmt.Stringer

// implements fmt.Stringer

func (r RayTrace) String() string {

    return fmt.Sprintf("RayTrace{Var1:%v Var2:%v Var3:%v UserID:%v}", r.Var1, r.Var2, r.Var3, r.UserID)

}


func GetRaytracesFor(id uint) []*RayTrace {

    raytraces := make([]*RayTrace, 0)

    err := GetDB().Table("ray_traces").Where("user_id = ?", id).Last(&raytraces).Error

    if err != nil {

        return nil

    }


    // now we can print anywhere without need to loop each element

    fmt.Println(raytraces)


    return raytraces

}


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号