如何反射出一个package下面的struct和struct's method

6b79 · · 4982 次点击
嗯,我看了revel里面使用go/build和go/parser进行查找。但是在revel的代码里面,他遍历controllers包的文件时,使用了这样的方式 (*packageName.structName)(nil),不是很明后面的(nil)是什么作用。 {{range $i, $c := .Controllers}} revel.RegisterController((*{{index $.ImportPaths .ImportPath}}.{{.StructName}})(nil), []*revel.MethodType{ {{range .MethodSpecs}}&revel.MethodType{ Name: "{{.Name}}", Args: []*revel.MethodArg{ {{range .Args}} &revel.MethodArg{Name: "{{.Name}}", Type: reflect.TypeOf((*{{index $.ImportPaths .ImportPath | .TypeExpr.TypeName}})(nil)) },{{end}} }, RenderArgNames: map[int][]string{ {{range .RenderCalls}} {{.Line}}: []string{ {{range .Names}} "{{.}}",{{end}} },{{end}} }, }, {{end}} }) {{end}}
#2
更多评论
polaris
社区,需要你我一同完善!
查阅 reflect 包吧
#1
polaris
社区,需要你我一同完善!
这个意思: package main func main() { type A struct{} var i interface{} = (*A)(nil) switch i.(type) { case *A: println("A struct") default: } }
#3