我具有以下结构和功能:
type RayTrace struct {
gorm.Model
Var1 float64 `json:"var1"`
Var2 float64 `json:"var2"`
Var3 float64 `json:"var3"`
UserID uint `json:"user_id"`
}
...
// GetRaytracesFor function
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
}
return raytraces
}
如何获取/打印从db调用返回的数据?
谢谢!
答案 0 :(得分:0)
我假设您要问的是如何打印指针切片的值,而不是地址。在这种情况下,使用fmt.Println(raytraces)
或fmt.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
}
更多阅读内容:
golang how to print struct value with pointer