主页 > 其他  > 

Golang中的反射,并用来获取数据类型


Go语言提供了一种机制在运行中获取某个变量的类型,获取或修改变量的值,调用变量的方法。

示例代码如下

1. 使用 x.(type)获取变量类型 package main import "strconv" //StrPrint 将几种已知数据类型转化为 string func StrPrint(x interface{}) string { // 表示具有string方法的接口 type stringer interface { String() string } switch x := x.(type) { case stringer: return x.String() case string: return x case int: return strconv.Itoa(x) case bool: if x { return "true" } return "false" default: return "???" } } func main() { StrPrint(2333) } 2. 通过 reflect.Value 获取变量类型

通过 reflect.Value 判断变量类型,并转换成 string。

package format import ( "reflect" "strconv" ) func Any(value interface{}) string { return formatAtom(reflect.ValueOf(value)) } // formatAtom 将变量转为string func formatAtom(v reflect.Value) string { switch v.Kind() { case reflect.Invalid: return "invalid" case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return strconv.FormatInt(v.Int(), 10) case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: return strconv.FormatUint(v.Uint(), 10) case reflect.Float32, reflect.Float64: return strconv.FormatFloat(v.Float(), 'f', -1, 64) case reflect.Complex64, reflect.Complex128: return strconv.FormatComplex(v.Complex(), 'f', -1, 128) case reflect.Bool: return strconv.FormatBool(v.Bool()) case reflect.String: return strconv.Quote(v.String()) case reflect.Chan, reflect.Func, reflect.Ptr, reflect.Slice, reflect.Map: return v.Type().String() + " 0x" + strconv.FormatUint(uint64(v.Pointer()), 16) default: return v.Type().String() + " value" } } 3.使用类型断言将变量转换为特定类型 value, ok := x.(T) package main import ( "fmt" ) func main() { var x interface{} x = 2333 value, ok := x.(int) fmt.Print(value, ",", ok) }

输出结果:

2333,true 4. 使用反射获取一个结构体的字段信息 package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := Person{"Alice", 25} // 获取类型信息 t := reflect.TypeOf(p) fmt.Println("Type:", t) // 获取字段信息 for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Println("Field:", field.Name, field.Type) } }

输出结果:

Type: main.Person Field: Name string Field: Age int
标签:

Golang中的反射,并用来获取数据类型由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Golang中的反射,并用来获取数据类型