diff --git a/main.go b/main.go index de3a65d..ecf48bc 100644 --- a/main.go +++ b/main.go @@ -5,9 +5,47 @@ import ( "go/ast" "go/parser" "go/token" + "os" ) func main() { + // 设置文件路径 + filePath := "/home/eson/workspace/requests" + + // 解析指定目录下的所有Go源代码文件 + fset := token.NewFileSet() + pkgs, err := parser.ParseDir(fset, filePath, nil, 0) + if err != nil { + fmt.Println(err) + return + } + + // 遍历每个包 + for _, pkg := range pkgs { + // 遍历每个文件 + for _, file := range pkg.Files { + // 遍历每个声明 + for _, decl := range file.Decls { + // 检查声明是否为函数声明 + if decl, ok := decl.(*ast.FuncDecl); ok { + // 检查函数是否导出(暴露) + if decl.Recv == nil && decl.Name.IsExported() { + // 打印函数签名 + + fmt.Printf("%s(%#v, %#v) error\n", decl.Name, decl.Type.Params, decl.Type.Results) + } + } + } + } + } +} + +// 辅助函数:将类型转换为字符串表示 +func typeString(typ ast.Expr) string { + return os.Getenv("GOPATH") + "/src/reflect/type.go" // 这里只是一个示例,你需要替换为你的实际代码来解析类型并将其转换为字符串表示 +} + +func main2() { fset := token.NewFileSet() pkgs, err := parser.ParseDir(fset, "/home/eson/workspace/requests", nil, 0) if err != nil {