我想编写一些代码来检查结构的方法并对它们做出某些断言,例如,它们返回的最后一个东西应该是error. 我尝试了以下示例脚本:
import (
"context"
"reflect"
)
type Service struct {
name string
}
func (svc *Service) Handle(ctx context.Context) (string, error) {
return svc.name, nil
}
func main() {
s := &Service{}
t := reflect.TypeOf(s)
for i := 0; i < t.NumMethod(); i++ {
f := t.Method(i).Func.Type()
f.Out(f.NumOut() - 1).Implements(reflect.TypeOf(error))
}
}
然而,这会产生一个
./main.go:23:51: type error is not an expression
编译的是最后的以下两行:
var err error
f.Out(f.NumOut() - 1).Implements(reflect.TypeOf(err))
但是,这会产生恐慌:
panic: reflect: nil type passed to Type.Implements
检查最后一个参数是否实现error接口的正确方法是什么?换句话说,我如何获得reflect.Type一个error接口?
神不在的星期二
千巷猫影
慕莱坞森
相关分类