想通过代码实现将一个package中的struct和struct的方法及参数获取出来。
更多评论
嗯,我看了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
这个意思:
package main
func main() {
type A struct{}
var i interface{} = (*A)(nil)
switch i.(type) {
case *A:
println("A struct")
default:
}
}
#3