- package main
- import (
- "fmt"
- "reflect"
- )
- type A struct {
- B
- Name string
- Age int
- UseTool bool
- }
- type B struct {
- C
- Name1 string
- Age1 int
- UseTool1 bool
- }
- type C struct {
- Name2 string
- Age2 int
- UseTool2 bool
- }
- func main() {
- m := B{C{"aa",12,true},"aa",true}
- u := A{m,true}
- getInfo(u)
- getStructInfo(u)
- }
- func getInfo(obj interface{}) {
- objCheck := reflect.ValueOf(obj)
- switch objCheck.Kind() {
- case reflect.Ptr:
- fmt.Print("Ptr")
- //objCheck.Elem()
- case reflect.Struct:
- fmt.Print("Struct")
- case reflect.String:
- fmt.Print("String")
- case reflect.Int:
- fmt.Print("Int")
- }
- }
- func getStructInfo(obj interface{}) {
- objType := reflect.TypeOf(obj)
- objValue := reflect.ValueOf(obj)
- dealAnonymous(objType,objValue)
- return
- }
- func dealAnonymous(objType reflect.Type,objValue reflect.Value) {
- for i := 0; i < objType.NumField(); i++ {
- objRef := objType.Field(i)
- if objRef.Anonymous {
- dealAnonymous(objRef.Type,objValue.Field(i))
- continue
- }
- objVal := objValue.Field(i).Interface()
- fmt.Printf("\n%-12s: %-6v = %v",objRef.Name,objRef.Type,objVal)
- }
- return
- }
以前学golang的时候写的小例子,具体函数不懂请查阅标准库。
感觉python能做的工作, Golang都可以代替。
性能感觉不错。