在这里打印"Foo"的方式是什么?在这个例子中,打印的是"字符串".
http://play.golang.org/p/ZnK6PRwEPp
type A struct {
Foo string
}
func (a *A) PrintFoo() {
fmt.Println("Foo value is " + a.Foo)
}
func main() {
a := &A{Foo: "afoo"}
val := reflect.Indirect(reflect.ValueOf(a))
fmt.Println(val.Field(0).Type().Name())
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*dge 58
你想要的val.Type().Field(0).Name.该Field方法对reflect.Type将返回描述该字段,该字段包括名称,以及其它的信息的结构.
无法检索reflect.Value表示特定字段值的字段名称,因为这是包含结构的属性.
fab*_*ioM 19
您需要获取类型定义的字段而不是值.
http://play.golang.org/p/7Bc7MJikbJ
package main
import "fmt"
import "reflect"
type A struct {
Foo string
}
func (a *A) PrintFoo() {
fmt.Println("Foo value is " + a.Foo)
}
func main() {
a := &A{Foo: "afoo"}
val := reflect.Indirect(reflect.ValueOf(a))
fmt.Println(val.Type().Field(0).Name)
}
Run Code Online (Sandbox Code Playgroud)
Fat*_*lan 19
使用结构的新Names方法包它更容易:
package main
import (
"fmt"
"github.com/fatih/structs"
)
type A struct {
Foo string
Bar int
}
func main() {
names := structs.Names(&A{})
fmt.Println(names) // ["Foo", "Bar"]
}
Run Code Online (Sandbox Code Playgroud)
Osc*_*989 15
我认为在结构中获取字段名称的更好方法是
func main() {
a := &A{Foo: "afoo"}
val := reflect.ValueOf(a).Elem()
for i:=0; i<val.NumField();i++{
fmt.Println(val.Type().Field(i).Name)
}
}
Run Code Online (Sandbox Code Playgroud)
有两个提示:
.Elem()在你之后使用reflect.ValueOf(a),因为在你的情况下,a是一个指针.val.Field(i).Type().Name完全不同于val.Type().Field(i).Name.后者可以获得结构中字段的名称希望它有用..