代码之家  ›  专栏  ›  技术社区  ›  Bruce Adams horns

修复go使用的工具版本

  •  0
  • Bruce Adams horns  · 技术社区  · 6 年前

    我期待着创建可复制的建设与围棋。 对于单个项目,我们使用glide。

    例如,我使用:

    glide get github.com/stretchr/testify
    

    修正“作证”软件包的版本。 例如:

    glide install github.com/tebeka/go2xunit
    

    所以我必须使用:

    go get github.com/tebeka/go2xunit
    

    哪个安装 GO2X单元 .

    问:如何修复像go2xunit这样的工具版本?

    我还注意到 glide says use dep instead dep说 golang has diverged from its implementation 最终可能会使用基于 vgo . 对于go来说,有很多依赖关系管理工具也许其中一个不太知名的工具支持这一点?

    如果相关的话,我使用Debian9提供的Go1.7.4。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Bruce Adams horns    6 年前

    go1.11使用go模块的解决方案是创建一个 fake tools package 你创造了一个 工具.go 文件如下:

    // +build tools
    
    package tools
    
    import (
            _ "github.com/tebeka/go2xunit"
    )
    

    +建造 tools是一个神奇的注释,它阻止了包的构建。

    >go mod init tools
    

    转到.mod 工具 包裹

    >go install github.com/tebeka/go2xunit
    

    module tools
    
    require github.com/tebeka/go2xunit v1.4.8 // indirect
    

    安装github.com/tebeka/go2xunit 在将来(对于一个干净的版本来说),它的版本将被go.mod固定到v1.4


    对于go 1.11之前的版本,要使用的工具是 retool 工作原理如下:

    go get github.com/twitchtv/retool
    

    添加工具:

    retool add github.com/jteeuwen/go-bindata/go-bindata origin/master
    

    retool do go-bindata -pkg testdata -o ./testdata/testdata.go ./testdata/data.json
    

    在目标go 1.12的路线图上可能会添加对此的支持( https://github.com/golang/go/issues/27653 )

        2
  •  0
  •   coolaj86    4 年前

    我没有看到要添加到go.mod中的依赖项,因此出现以下错误:

    tools/tools.go:6:5: import "github.com/UnnoTed/fileb0x" is a program, not an importable package
    

    (fileb0x是我要添加的内容)

    我不是百分之百的清楚事情的顺序,但是我做了所有这些事情:

    使用“工具”包

    我做了一个 tools 目录:

    mkdir -p tools
    

    我把工具包放在里面(如上所述):

    // +build tools
    
    package tools
    
    import (
        _ "github.com/UnnoTed/fileb0x"
    )
    

    注意标签是

    // +build foo
    

    ignore . 这是一个特殊的预定义标记。

    // +build ignore
    
    // NO NO NO NO NO
    // `ignore` is a special keyword which (surprise) will cause
    // the file to be ignore, even for dependencies
    

    这个 最佳方法 go mod tidy :

    go mod tidy
    

    然而,在此之前,我运行了许多命令,试图找出哪个命令会导致它进入 go.mod

    go install github.com/UnnoTed/fileb0x # didn't seem to do the trick
    go get
    go generate ./...
    go build ./...
    go install ./...
    go mod vendor
    

    后来我做了一个 git reset rm -rf ~/go/pkg/mod; mkdir ~/go/pkg/mod 我发现 去整理一下

    供应商

    为了实际利用项目中的模块缓存,您需要复制源代码

    go mod vendor
    

    您还需要更改几乎所有要使用的go命令 -mod=vendor 在任何情况下 Makefile S Dockerfile 或其他脚本。

    go fmt -mod=vendor ./... # has a bug which should be fixed in go1.15
    go generate -mod=vendor ./...
    go build -mod=vendor ./...
    

    go build , go get , go install ,以及任何 go run 呼叫人 go generate (甚至是 (自身)

    //go:generate go run -mod=vendor github.com/UnnoTed/fileb0x b0x.toml
    package main
    
    // ...