大多数情况下,go.mod
文件看起来像这样:
module <module_name>
go 1.16
require (...)
现在,我想在另一个golang项目中提取版本值1.16
我读取文件并将其存储在缓冲区中。
buf, err := ioutil.ReadFile(goMODfile)
if err != nil {
return false, err.Error()
}
我猜FindString()
或MatchString()
函数可以帮助我在这里,但我不确定如何!
您可以使用"golang.org/x/mod/modfile"
来解析go.mod
文件的内容,而不是regexp。
f, err := modfile.Parse("go.mod", file_bytes, nil)
if err != nil {
panic(err)
}
fmt.Println(f.Go.Version)
https://play.golang.org/p/XETDzMcTwS_S
如果你必须使用regexp,那么你可以这样做:
re := regexp.MustCompile(`(?m)^go (d+.d+(?:.d+)?)$`)
match := re.FindSubmatch(file_bytes)
version := string(match[1])
https://play.golang.org/p/L5-LM67cvgP
报告Go模块信息的简单方法是使用go list
。您可以使用-m
标志来列出模块的属性,使用-f
标志来报告特定字段。如果没有指定具体的模块,go list -m
将报告主模块的信息(包含当前工作目录)。
例如,列出主模块的GoVersion
:
$ go list -f {{.GoVersion}} -m