Golang 一些小例——反射

来源:互联网 发布:ftp 端口 tcp还是udp 编辑:程序博客网 时间:2024/06/06 04:07
package mainimport (     "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", 12, true}     u := A{m, "aa", 12, 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都可以代替。

性能感觉不错。

0 0