/*
* @description:
*/
/*
* @description:
*/
/*
* @description:
*/
package main
import (
"fmt"
"reflect"
)
func main() {
hh := DBDrive{
Type: "Badger",
}
checkReflect(hh, hh.Type, "GetGlobalObj")
}
type DBDrive struct {
Type string
Mysql Mysql
Badger Badger
}
type Mysql struct{}
func (m Mysql) GetGlobalObj() {
fmt.Println("mysql func")
}
type Badger struct{}
func (b Badger) GetGlobalObj() {
fmt.Println("badger func")
}
// inter一个嵌套结构体
func checkReflect(inter interface{}, attributeName, method string) {
v := reflect.ValueOf(inter)
dbObj := v.FieldByName(attributeName) // 根据字段名获取属性 // 获得struct inter内嵌套的struct attributeName
m := dbObj.MethodByName(method) // 获取 struct attributeName的method方法
m.Call([]reflect.Value{}) // 调用struct attributeName的method方法 m.Call([]reflect.Value{reflect.ValueOf("参数值")})
}
go-反射-reflect
最新推荐文章于 2024-01-13 10:43:18 发布
该博客探讨了如何在Go语言中通过反射机制调用嵌套结构体的特定方法。示例代码展示了如何获取`DBDrive`类型的实例,并通过`checkReflect`函数找到并执行`Badger`结构体内的`GetGlobalObj`方法。
摘要由CSDN通过智能技术生成