读取go.mod并检测项目版本

Kev*_*ata 1 regex go

大多数情况下,go.mod文件看起来像这样:

module <module_name>

go 1.16

require (...)
Run Code Online (Sandbox Code Playgroud)

现在,我想提取1.16另一个 golang 项目中的版本值,我读取文件并将其存储在缓冲区中。

buf, err := ioutil.ReadFile(goMODfile)
if err != nil {
    return false, err.Error()
}
Run Code Online (Sandbox Code Playgroud)

我想FindString()MatchString()函数可以帮助我,但我不知道如何!

mko*_*iva 5

您可以只使用正则表达式"golang.org/x/mod/modfile"来解析go.mod文件的内容,而不是使用正则表达式。

f, err := modfile.Parse("go.mod", file_bytes, nil)
if err != nil {
    panic(err)
}
fmt.Println(f.Go.Version)
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/XETDzMcTwS_S


如果您必须使用正则表达式,那么您可以执行以下操作:

re := regexp.MustCompile(`(?m)^go (\d+\.\d+(?:\.\d+)?)$`)
match := re.FindSubmatch(file_bytes)
version := string(match[1])
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/L5-LM67cvgP