Go获取类型底层类型

来源:互联网 发布:欧洲史 知乎 bbc 编辑:程序博客网 时间:2024/06/06 01:30

先看一下一段实例代码
使用匿名接口作为结构体成员:

package mainimport (    "fmt"    "reflect")type tester struct {    s interface{        String() string    }}type user struct {    id  int    name string}func (self *user)String()string  {    return fmt.Sprintf("User %d ,%s",self.id,self.name)}func main() {    t := tester{&user{id : 001,name : "Sergey"}}    a := reflect.TypeOf(t)    //b := reflect.ValueOf(t)    fmt.Println(a.Field(0).Type)    fmt.Println(t.s.String())    //fmt.Println(a.Kind())}

代码中:fmt.Println(t.s.String()) 输出结果user 1,Sergey
因为t不是interface,不能类型断言推断,所以我就想着获取它结构体里字段的底层类型,用到了reflect包.

fmt.Println(a.Field(0).Type)//输出结果:interface { String() string }

此外你可以通过for i:=0;i<t.NumField();i++ 来遍历结构体的字段,a.Field(0).Name获得字段的名称等等

原创粉丝点击