Read go.Mod并检测项目的版本



大多数情况下,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

相关内容

  • 没有找到相关文章

最新更新