我如何打印(到控制台)的Id,标题,名称等,这个结构在Golang?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
我如何打印(到控制台)的Id,标题,名称等,这个结构在Golang?
type Project struct {
Id int64 `json:"project_id"`
Title string `json:"title"`
Name string `json:"name"`
Data Data `json:"data"`
Commits Commits `json:"commits"`
}
当前回答
打印结构中字段的名称:
fmt.Printf("%+v\n", yourProject)
从fmt包:
打印结构体时,加号标记(%+v)添加字段名
假设你有一个项目的实例(在'yourProject'中)
文章JSON和Go将详细介绍如何从JSON结构中检索值。
这个Go by示例页面提供了另一种技术:
type Response2 struct {
Page int `json:"page"`
Fruits []string `json:"fruits"`
}
res2D := &Response2{
Page: 1,
Fruits: []string{"apple", "peach", "pear"}}
res2B, _ := json.Marshal(res2D)
fmt.Println(string(res2B))
这将打印:
{"page":1,"fruits":["apple","peach","pear"]}
如果您没有任何实例,那么您需要使用反射来显示给定结构的字段名称,如本例所示。
type T struct {
A int
B string
}
t := T{23, "skidoo"}
s := reflect.ValueOf(&t).Elem()
typeOfT := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Printf("%d: %s %s = %v\n", i,
typeOfT.Field(i).Name, f.Type(), f.Interface())
}
其他回答
访问这里查看完整的代码。在这里你还可以找到一个在线终端的链接,在那里可以运行完整的代码,程序表示如何提取结构的信息(字段的名称、类型和值)。下面是只打印字段名的程序片段。
package main
import "fmt"
import "reflect"
func main() {
type Book struct {
Id int
Name string
Title string
}
book := Book{1, "Let us C", "Enjoy programming with practice"}
e := reflect.ValueOf(&book).Elem()
for i := 0; i < e.NumField(); i++ {
fieldName := e.Type().Field(i).Name
fmt.Printf("%v\n", fieldName)
}
}
/*
Id
Name
Title
*/
打印结构中字段的名称:
fmt.Printf("%+v\n", yourProject)
从fmt包:
打印结构体时,加号标记(%+v)添加字段名
假设你有一个项目的实例(在'yourProject'中)
文章JSON和Go将详细介绍如何从JSON结构中检索值。
这个Go by示例页面提供了另一种技术:
type Response2 struct {
Page int `json:"page"`
Fruits []string `json:"fruits"`
}
res2D := &Response2{
Page: 1,
Fruits: []string{"apple", "peach", "pear"}}
res2B, _ := json.Marshal(res2D)
fmt.Println(string(res2B))
这将打印:
{"page":1,"fruits":["apple","peach","pear"]}
如果您没有任何实例,那么您需要使用反射来显示给定结构的字段名称,如本例所示。
type T struct {
A int
B string
}
t := T{23, "skidoo"}
s := reflect.ValueOf(&t).Elem()
typeOfT := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Printf("%d: %s %s = %v\n", i,
typeOfT.Field(i).Name, f.Type(), f.Interface())
}
使用包fmt输出非常方便:
fmt.Printf("%+v \n", yourProject)
如果你想看到完整的sturct类型,你可以使用# replace +:
fmt.Printf("%#v \n", yourProject)
fmt.Printf("%+v\n", project)
这是打印细节的基本方法
不使用外部库,每个字段后加新行:
log.Println(
strings.Replace(
fmt.Sprintf("%#v", post), ", ", "\n", -1))