首页 > 后端开发 > Golang > 如何列出Go包的公共方法?

如何列出Go包的公共方法?

Barbara Streisand
发布: 2024-12-06 12:13:14
原创
464 人浏览过

How to List Public Methods of a Go Package?

列出 Go 中包的公共方法

问题:

怎么可能枚举Go中包的公共方法?考虑下面的代码结构:

main.go:

1

2

3

4

5

package main

 

func main() {

    // list public methods in here

}

登录后复制

libs/met hod.go:

1

2

3

4

5

6

7

8

9

package libs

 

func Result1() {

    fmt.Println("method Result1")

}

 

func Result2() {

    fmt.Println("method Result2")

}

登录后复制

答案:

遗憾的是, Go 缺乏满足此请求的直接功能。导入包时,编译器可能会在优化期间删除未使用的方法。因此,仅仅导入包并不能保证所有方法都存在。

替代方案:

静态分析:

您可以使用Go的反射库解析包的源代码并提取函数声明。考虑以下示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import (

    "fmt"

    "go/parser"

    "go/token"

)

 

func main() {

    fileset := token.NewFileSet()

    packages, err := parser.ParseDir(fileset, "./libs", nil, 0)

    if err != nil {

        fmt.Println("Parsing failed:", err)

        return

    }

 

    methods := []string{}

    for _, p := range packages {

        // Get all methods in each source file.

        for _, f := range p.Files {

            for _, dec := range f.Decls {

                if fn, ok := dec.(*parser.FuncDecl); ok && fn.Name.IsExported() {

                    methods = append(methods, fn.Name.String())

                }

            }

        }

    }

 

    fmt.Println("Exported methods in package 'libs':", methods)

}

登录后复制

注意:此方法仅提供函数声明,而不提供其实现。

动态反射:

或者,您可以在运行时使用 Go 的 Reflect 包来检查值的方法。但是,这需要有相关类型的初始化实例。

请记住,这些方法有局限性,可能并不适合所有用例。

以上是如何列出Go包的公共方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板