2 回答

TA贡献1848条经验 获得超10个赞
您可以像这样与标志和标志一起使用:go list
-m
-f
go list -m -f '{{.Dir}}' example.com/b
旗帜:-m
导致 go list 列出模块而不是包。在这种模式下,去列表的参数可以是模块,模块模式(包含...通配符)、版本查询或特殊模式 all,它与构建列表中的所有模块匹配。如果未指定任何参数,则列出主模块。
(参考)
旗帜:-f
使用包模板的语法指定输出的备用格式。使用标志时,传递给模板的结构为:
-m
type Module struct {
Path string // module path
Version string // module version
Versions []string // available module versions (with -versions)
Replace *Module // replaced by this module
Time *time.Time // time version was created
Update *Module // available update, if any (with -u)
Main bool // is this the main module?
Indirect bool // is this module only an indirect dependency of main module?
Dir string // directory holding files for this module, if any
GoMod string // path to go.mod file for this module, if any
GoVersion string // go version used in module
Error *ModuleError // error loading module }
type ModuleError struct {
Err string // the error itself
}

TA贡献1909条经验 获得超7个赞
您可以像这样计算出模块路径:
package main
import (
"fmt"
"os"
"path"
"golang.org/x/mod/module"
)
func GetModulePath(name, version string) (string, error) {
// first we need GOMODCACHE
cache, ok := os.LookupEnv("GOMODCACHE")
if !ok {
cache = path.Join(os.Getenv("GOPATH"), "pkg", "mod")
}
// then we need to escape path
escapedPath, err := module.EscapePath(name)
if err != nil {
return "", err
}
// version also
escapedVersion, err := module.EscapeVersion(version)
if err != nil {
return "", err
}
return path.Join(cache, escapedPath+"@"+escapedVersion), nil
}
func main() {
var path, err = GetModulePath("github.com/jakubDoka/mlok", "v0.4.7")
if err != nil {
panic(err)
}
if _, err := os.Stat(path); os.IsNotExist(err) {
fmt.Println("you don't have this module/version installed")
}
fmt.Println("module found in", path)
}
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报