【发布时间】:2021-03-26 09:22:43
【问题描述】:
package main
import (
"fmt"
"reflect"
)
type Aservice struct {
}
type Adata struct {
msg string
}
type Bdata struct {
more string
}
var amap map[string]interface{} = make(map[string]interface{}, 1024)
func (aser *Aservice) Bar(data *Adata) error {
return nil
}
func (aser *Aservice) Foo(data *Bdata) error {
return nil
}
func main() {
var ser *Aservice
typeOfService := reflect.TypeOf(ser)
valueOfService := reflect.ValueOf(ser)
for i := 0; i < valueOfService.NumMethod(); i++ {
nref := valueOfService.Method(i).Type().In(0)
fmt.Println("++", nref.Elem().Name())
amap[typeOfService.Method(i).Name] = nref
}
}
目前“Adata”和“Bdata”可以正确打印
但是我不知道如何将“Adata”和“Bdata”的空结构指针存储在amap中
不知道下一步
我想在amap中使用Method(i).Name()来存储Method需要传入的参数
【问题讨论】:
-
要获取给定指针类型的
nil值,您可以执行reflect.New(t).Elem().Interface(): play.golang.org/p/2Hl_CFtf7Yb -
@mkopriva 如果我希望指针为零怎么办?
-
这就是操场上的代码所产生的,不是吗?
-
我预计结果会像
Bar &main.Adata{msg:""} -
要获得指向空结构的指针,您可以这样做:reflect.New(t.Elem()).Interface()