大多数情况下,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()函数可以帮助我,但我不知道如何!
您可以只使用正则表达式"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