英文:
Read go.mod and detect the version of project
问题
大多数情况下,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()
函数可以帮助我,但我不确定如何使用!
英文:
Mostly, go.mod
file looks something like this :
module <module_name>
go 1.16
require (...)
Now, I want to extract the version value 1.16
in another golang project
I read the file and stored it in a buffer.
buf, err := ioutil.ReadFile(goMODfile)
if err != nil {
return false, err.Error()
}
I guess FindString()
or MatchString()
functions can help me out here, but I am not sure how !
答案1
得分: 3
你可以使用"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)
如果你必须使用正则表达式,可以按照以下方式操作:
re := regexp.MustCompile(`(?m)^go (\d+\.\d+(?:\.\d+)?)$`)
match := re.FindSubmatch(file_bytes)
version := string(match[1])
英文:
Instead of regexp you could just use "golang.org/x/mod/modfile"
to parse the go.mod
file's contents.
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
If you have to use regexp, then you could do the following:
re := regexp.MustCompile(`(?m)^go (\d+\.\d+(?:\.\d+)?)$`)
match := re.FindSubmatch(file_bytes)
version := string(match[1])
答案2
得分: 1
关于Go模块报告信息的简单方法是使用go list
命令。你可以使用-m
标志列出模块的属性,使用-f
标志报告特定的字段。如果没有指定特定的模块,go list -m
会报告关于主模块(包含当前工作目录)的信息。
例如,要列出主模块的GoVersion
:
$ go list -f {{.GoVersion}} -m
英文:
The simple way to report information about a Go module is to use go list
. You can use the -m
flag to list properties of modules and the -f
flag to report specific fields. If no specific module is given, go list -m
reports information about the main module (containing the current working directory).
For example, to list the GoVersion
for the main module:
$ go list -f {{.GoVersion}} -m
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论