乐闻世界logo
搜索文章和话题

Golang 如何在控制台中打印结构变量?

3个答案

1
2
3

在Go语言中,如果您想在控制台中打印结构体变量,可以使用fmt包中的Println函数或者Printf函数。另外,为了能够更加美观地输出结构体的内容,可以使用%+v这个格式化占位符,它会以字段名和相应的值的形式输出结构体信息。当然,如果你想要完整的控制输出格式,也可能需要实现String()方法来自定义结构体的字符串表示。下面是一个简单的例子:

首先,定义一个结构体:

go
package main import ( "fmt" ) // 定义一个示例结构体 type Person struct { Name string Age int City string }

然后,创建一个结构体实例并打印它:

go
func main() { // 创建一个结构体实例 p := Person{ Name: "Alice", Age: 25, City: "New York", } // 使用 fmt 包打印结构体 // %+v 打印包含字段名和字段值的结构体信息 fmt.Printf("Person: %+v\n", p) // 或者使用 fmt.Println 也可以打印结构体的值,但不包括字段名 fmt.Println("Person:", p) // 如果需要更定制化的输出,可以实现 String 方法 fmt.Println(p.String()) } // 实现 String 方法来自定义 Person 结构体的字符串表示形式 func (p Person) String() string { return fmt.Sprintf("Name: %s, Age: %d, City: %s", p.Name, p.Age, p.City) }

当你运行这段代码时,控制台将输出:

shell
Person: {Name:Alice Age:25 City:New York} Person: {Alice 25 New York} Name: Alice, Age: 25, City: New York

在第一个Printf中,%+v格式化占位符使得结构体的每个字段名和对应的值都被打印出来。而在使用Println时,只有结构体的值被打印,没有字段名。最后,通过实现String()方法,我们有了完全自定义的输出格式。

2024年6月29日 12:07 回复

我想推荐go-spew,根据他们的 github “为 Go 数据结构实现一个深度漂亮的打印机以帮助调试”

shell
go get -u github.com/davecgh/go-spew/spew

用法示例:

shell
package main import ( "github.com/davecgh/go-spew/spew" ) type Project struct { Id int64 `json:"project_id"` Title string `json:"title"` Name string `json:"name"` Data string `json:"data"` Commits string `json:"commits"` } func main() { o := Project{Name: "hello", Title: "world"} spew.Dump(o) }

输出:

shell
(main.Project) { Id: (int64) 0, Title: (string) (len=5) "world", Name: (string) (len=5) "hello", Data: (string) "", Commits: (string) "" }
2024年6月29日 12:07 回复

我认为如果您想要某种格式的输出,最好实现自定义纵梁struct

例如

shell
package main import "fmt" type Project struct { Id int64 `json:"project_id"` Title string `json:"title"` Name string `json:"name"` } func (p Project) String() string { return fmt.Sprintf("{Id:%d, Title:%s, Name:%s}", p.Id, p.Title, p.Name) } func main() { o := Project{Id: 4, Name: "hello", Title: "world"} fmt.Printf("%+v\n", o) }
2024年6月29日 12:07 回复

你的答案