如何在Golang项目中从go.mod文件提取对应Go版本号
提取go.mod文件中Go版本号的实现方法
你可以通过正则表达式匹配go.mod中单独声明Go版本的行,捕获版本号部分即可,具体实现如下:
首先导入regexp标准包,编译适配多行匹配的正则表达式,再用FindStringSubmatch方法提取捕获组的内容:
import "regexp" // 预先编译正则,全局初始化一次即可 var goVersionRegex = regexp.MustCompile(`(?m)^go\s+([\d.]+)\s*$`) // 你的已有逻辑 buf, err := ioutil.ReadFile(goMODfile) if err != nil { return false, err.Error() } // 匹配版本号 match := goVersionRegex.FindStringSubmatch(string(buf)) if len(match) < 2 { // 未匹配到go版本声明的错误处理 return false, "未找到go版本声明" } goVersion := match[1] // 此时goVersion就是你需要的版本号,比如"1.16"、"1.21.5"
正则规则说明:
(?m)开启多行匹配模式,让^可以匹配每一行的行首,避免匹配到注释或者require块内的内容^go\s+匹配行首以go加至少一个空白字符开头的内容([\d.]+)捕获由数字和点组成的版本号部分,兼容「主版本+次版本」、「主版本+次版本+修订版本」两种格式\s*$匹配行尾可能存在的空白字符,避免行尾空格导致匹配失败
注意你的需求是提取版本号内容,所以需要用FindStringSubmatch获取捕获组结果,如果仅需要判断是否存在合法版本声明,才可以使用MatchString方法。
内容的提问来源于stack exchange,提问作者Keval Bhogayata
相关产品推荐
相关产品推荐

