-
红糖糍粑
在撰写本文时,我不知道有任何公开的 API。但是,查看源代码,在Go mod 源文件go mod中有一个功能非常有用// ModulePath returns the module path from the gomod file text.// If it cannot find a module path, it returns an empty string.// It is tolerant of unrelated problems in the go.mod file.func ModulePath(mod []byte) string { //...}func main() { src := `module github.com/you/hellorequire rsc.io/quote v1.5.2` mod := ModulePath([]byte(src)) fmt.Println(mod)}哪些输出github.com/you/hello
-
繁花不似锦
尝试这个?package mainimport ( "fmt" "io/ioutil" "os" modfile "golang.org/x/mod/modfile")const ( RED = "\033[91m" RESET = "\033[0m")func main() { modName := GetModuleName() fmt.Fprintf(os.Stdout, "modName=%+v\n", modName)}func exitf(beforeExitFunc func(), code int, format string, args ...interface{}) { beforeExitFunc() fmt.Fprintf(os.Stderr, RED+format+RESET, args...) os.Exit(code)}func GetModuleName() string { goModBytes, err := ioutil.ReadFile("go.mod") if err != nil { exitf(func() {}, 1, "%+v\n", err) } modName := modfile.ModulePath(goModBytes) fmt.Fprintf(os.Stdout, "modName=%+v\n", modName) return modName}
-
交互式爱情
如果您的起点是一个go.mod文件并且您正在询问如何解析它,我建议您从 开始 ,它以 JSON 格式go mod edit -json输出特定文件。或者,您可以使用rogpeppe/go-internal/modfile,这是一个可以解析文件的 go 包,并且被rogpeppe/gohack和来自更广泛社区的一些其他工具go.mod使用。Issue #28101我认为跟踪向 Go 标准库添加一个新的 API 来解析go.mod文件。以下是文档的片段go mod edit -json:-json 标志以 JSON 格式打印最终的 go.mod 文件,而不是将其写回 go.mod。JSON 输出对应于这些 Go 类型:type Module struct { Path string Version string}type GoMod struct { Module Module Go string Require []Require Exclude []Module Replace []Replace}type Require struct { Path string Version string Indirect bool}这是 JSON 输出的示例片段go mod edit -json,显示了实际的模块路径(又名模块名称),这是您最初的问题:{ "Module": { "Path": "rsc.io/quote" },在这种情况下,模块名称是rsc.io/quote.
-
拉丁的传说
从 Go 1.12 开始(对于那些通过搜索找到它的人来说,他们使用的是模块,但不一定是 OP 提到的旧版本),该runtime/debug包包括获取有关构建的信息的功能,包括模块名称。例如:import ( "fmt" "runtime/debug")func main() { info, _ := debug.ReadBuildInfo() fmt.Printf("info: %+v", info.Main.Path)}