发布时间:2024-11-22 01:12:01
package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := Person{"Alice", 30} fmt.Println(reflect.TypeOf(p)) // 输出: main.Person }上述代码中使用了reflect.TypeOf()方法来获取结构体变量p的类型,并通过打印输出显示出来。输出结果为main.Person,表示类型是Person。
func IsStruct(v interface{}) bool { t := reflect.TypeOf(v) return t.Kind() == reflect.Struct }上述代码是一个简单的函数IsStruct(),接受一个interface{}类型的参数v,返回一个bool类型值,表示v是否为结构体类型。下面是一个使用示例:
package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func IsStruct(v interface{}) bool { t := reflect.TypeOf(v) return t.Kind() == reflect.Struct } func main() { p := Person{"Alice", 30} fmt.Println(IsStruct(p)) // 输出: true i := 10 fmt.Println(IsStruct(i)) // 输出: false }上述代码中,我们分别判断了p和i两个变量的类型是否为结构体类型,最终输出结果为true和false。这说明我们成功地使用反射判断了结构体类型。
package main import ( "fmt" "reflect" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { p := Person{"Alice", 30} t := reflect.TypeOf(p) for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Printf("Field %s: Type=%s, Tag=%s\n", field.Name, field.Type, field.Tag) } }上述代码中,我们定义了一个Person结构体,并使用reflect.TypeOf()方法获取其类型。然后通过循环遍历t的字段数量,利用t.Field()方法获取每个字段的信息,并打印输出。输出结果如下: Field Name: Type=string, Tag=json:"name" Field Age: Type=int, Tag=json:"age" 通过上述示例,我们成功获得了结构体Person中字段的类型和标签信息。