我正在寻找一个库或代码段,它允许(漂亮地)打印结构实例的内容,而不是它的结构。以下是一些代码和预期输出:
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
,但我不想漂亮地打印数据,我只需要结构的定义。
除了使用反射,我看不到其他选择
func Sprint(v interface{}) string {
t := reflect.Indirect(reflect.ValueOf(v)).Type()
fieldFmt := ""
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
fieldFmt += "\t" + field.Name + " " + field.Type.Name() + "\n"
}
return "type " + t.Name() + " struct {\n" + fieldFmt + "}"
}
请注意,这个函数没有验证/检查,可能会对非结构输入感到恐慌。
编辑:去游乐场:https://play.golang.org/p/5RiAt86Wj9F
其输出:
type Foo struct {
Bar string
Other int
}
像这样的东西有用吗?可能需要根据您的特定结构和用例进行一些调整(是否要打印值实际上是结构的接口{},等等)。
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
Go游乐场链接:https://play.golang.org/p/IN8-fCOe0OS
本文向大家介绍pytorch打印网络结构的实例,包括了pytorch打印网络结构的实例的使用技巧和注意事项,需要的朋友参考一下 最简单的方法当然可以直接print(net),但是这样网络比较复杂的时候效果不太好,看着比较乱;以前使用caffe的时候有一个网站可以在线生成网络框图,tensorflow可以用tensor board,keras中可以用model.summary()、或者plot_mo
问题内容: 我是新手,我想在其中打印struct变量的地址,这是我的程序 这个的输出 但是我想打印r变量的地址,因为我知道’&’代表地址,’*’指向指针位置的值,但是在这里我无法打印r的地址,我正在使用go-的在线编辑器lang https://play.golang.org/ 同样,我想将此地址存储在某个变量中。 问题答案: 当您使用来打印值时,将使用默认格式。引用以下文件的doc : %v的默
主要内容:基本的实例化形式,创建指针类型的结构体,取结构体的地址实例化结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存,因此必须在定义结构体并实例化后才能使用结构体的字段。 实例化就是根据结构体定义的格式创建一份与格式一致的内存区域,结构体实例与实例间的内存是完全独立的。 Go语言可以通过多种方式实例化结构体,根据实际需要可以选用不同的写法。 基本的实例化形式 结构体本身是一种类型,可以像整型、字符串等类型一样,以 var 的方式声明结构
本文向大家介绍javaScript 连接打印机,打印小票的实例,包括了javaScript 连接打印机,打印小票的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇javaScript 连接打印机,打印小票的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我有一个小的Go工具,该工具基本上允许用户定义一个命令,该命令将使用来运行。 我的问题是我想向用户显示命令的输出(stdout / stderr)。 一个示例可能看起来像这样:用户定义一个命令,最后是。 test.sh的 内容: 在我当前的实现中,用户仅在完成完整命令后才能看到输出。在上面的示例中,用户直到命令和第二次完成才看到输出 Start 。 我目前正在检索命令的输出,如下所示:
问题内容: 我正在看Go,它看起来很有前途。我试图弄清楚如何获得go结构的大小,例如 我当然知道它是24字节,但是我想以编程方式知道它。 您对如何执行此操作有任何想法吗? 问题答案: 注意: OP错误。unsafe.Sizeof确实在示例Coord3d结构上返回24。请参阅下面的评论。