反射基础概念什么是反射?反射是一种在运行时检查和操作类型的机制。它允许程序动态地获取类型信息,并对对象进行操作。基本类型反射的基本类型包括:reflect.Type:表示类型信息。reflect.Value:表示值信息。获取类型信息使用reflect.TypeOfpackag
什么是反射? 反射是一种在运行时检查和操作类型的机制。它允许程序动态地获取类型信息,并对对象进行操作。
基本类型 反射的基本类型包括:
reflect.Type:表示类型信息。reflect.Value:表示值信息。使用 reflect.TypeOf
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
t := reflect.TypeOf(a)
fmt.Println(t) // 输出:int
}
使用 reflect.ValueOf
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
v := reflect.ValueOf(a)
fmt.Println(v) // 输出:10
}
使用 Interface 方法
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
v := reflect.ValueOf(a)
b := v.Interface().(int)
fmt.Println(b) // 输出:10
}
使用 Convert 方法
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
v := reflect.ValueOf(a)
b := v.Convert(reflect.TypeOf(float64(0))).Interface().(float64)
fmt.Println(b) // 输出:10
}
使用 Kind 方法
package main
import (
"fmt"
"reflect"
)
func main() {
var a int = 10
t := reflect.TypeOf(a)
fmt.Println(t.Kind()) // 输出:int
}
使用 Type 方法
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Alice", 25}
t := reflect.TypeOf(p)
fmt.Println(t) // 输出:main.Person
}
获取结构体字段
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Alice", 25}
v := reflect.ValueOf(p)
t := v.Type()
for i := 0; i < v.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
fmt.Printf("%s: %v\n", field.Name, value.Interface())
}
}
修改结构体字段
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Alice", 25}
v := reflect.ValueOf(&p).Elem()
t := v.Type()
for i := 0; i < v.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)
switch field.Name {
case "Name":
value.SetString("Bob")
case "Age":
value.SetInt(30)
}
}
fmt.Println(p) // 输出:{Bob 30}
}
获取数组和切片长度
package main
import (
"fmt"
"reflect"
)
func main() {
a := []int{1, 2, 3, 4, 5}
v := reflect.ValueOf(a)
fmt.Println(v.Len()) // 输出:5
}
遍历数组和切片
package main
import (
"fmt"
"reflect"
)
func main() {
a := []int{1, 2, 3, 4, 5}
v := reflect.ValueOf(a)
for i := 0; i < v.Len(); i++ {... 如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!