go - 从 Go 中的实例打印结构定义
问题描述
我正在寻找一个允许(漂亮)打印的不是结构实例的内容而是它的结构的库或片段。这是一些代码和预期的输出:
package main
import "fantastic/structpp"
type Foo struct {
Bar string
Other int
}
func main() {
i := Foo{Bar: "This", Other: 1}
str := structpp.Sprint{i}
fmt.Println(str)
}
会打印(这个或类似的):
Foo struct {
Bar string
Other int
}
请注意,我知道github.com/davecgh/go-spew/spew
但我不想打印数据,我只需要结构的定义。
解决方案
像这样的东西会起作用吗?可能需要根据您的特定结构和用例进行一些调整(是否要打印值实际上是结构的接口{}等)
package main
import (
"fmt"
"reflect"
)
func printStruct(t interface{}, prefix string) {
s := reflect.Indirect(reflect.ValueOf(t))
typeOfT := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Printf("%s%s %s\n", prefix, typeOfT.Field(i).Name, typeOfT.Field(i).Type)
switch f.Type().Kind() {
case reflect.Struct, reflect.Ptr:
fmt.Printf("%s{\n", prefix)
printStruct(f.Interface(), prefix+"\t")
fmt.Printf("%s}\n", prefix)
}
}
}
然后,对于这个结构:
type C struct {
D string
}
type T struct {
A int
B string
C *C
E interface{}
F map[string]int
}
t := T{
A: 23,
B: "hello_world",
C: &C{
D: "pointer",
},
E: &C{
D: "interface",
},
}
你得到:
A int
B string
C *main.C
{
D string
}
E interface {}
F map[string]int
去游乐场链接: https: //play.golang.org/p/IN8-fCOe0OS
推荐阅读
- c# - Unity FAILURE:构建失败并出现异常
- apache-flink - 后期数据丢失的 Flink 端输出
- ruby-on-rails - 是否可以在 RoR 项目的根级别为不同的应用程序保留不同的文件夹
- mysql - MySQL查询将分隔字符串值拆分为单独的列
- wordpress - 如何修复 babel-polyfill 和 WordPress 的错误?
- heroku - heroku h10 崩溃 - 数据库连接错误
- powershell - 如果语句在脚本之外有效,但在 Powershell 内部无效
- docker - 启动 docker 时显示崩溃报告
- java - 为什么在android中对视图应用矩阵变换时,不同设备上的矩阵变换不同?
- yugabyte-db - 通过脚本文件创建 YB 数据库和模式