go mod 是golang的包管理模块。
    一下都在golang环境搭建好之后开始。
    使用go mod又如下方法:
    初始化项目:

    • 新建目录,并进入目录执行go mod init 项目名称,例如:mkdir test&&cd test&&go mod init github.com/li/testgolang,这样会再test/下新建一个文件go.mod 记录当前项目的信息,之后使用go get 就会自动把依赖的包信息写入到 go.mod下。
    • vender 执行命令go mod vendor 就会把go mod中所记录的包的依赖都复制到当前目录的vendor下,之后编译使用go build -mod=vendor 就是自动使用vendor目录下的依赖包来管理依赖,可以用发布版本的是时候执行一次,然后提交到发布的分支上去,这样就能保证发布的版本的全部依赖都一致。
    • go replace 对付翻墙 ,比如Photon依赖的go-ethereum实际上不是官方的任何一个版本,是根据我们自己的需要,做了修改的版本. 那么这时候也很简单,直接clone一个官方的版本到自己的github上,然后修改. 待修改完毕以后,新建一个版本即可.

      比如我就把 github.com/ethereum/go-ethereum clone到我自己的github上,然后按照vendor中的修改重新来一 遍,然后打了一个v1.9.1的tag.
      然后同样replace成下面的.
      replace (
      github.com/ethereum/go-ethereum v1.8.17 => github.com/nkbai/go-ethereum v1.9.1
      )
      注意:
      由于go mod目前处于较早起版本,我们手工修改文件要特别注意 否则会碰到莫名其妙的问题.我说一下我碰到的 两个问题

      1. replace和(之间的空格一定不能少
      2. => 前后的空格一定不能少
      3. 如果替换的版本号不知道是多少,直接写latest,go会自己找到最新版本填上去.
    • replace在下面的情况下没有起效果。
      • 设置 replace google.golang.org/grpc => github.com/grpc/grpc-go latest
      • 执行go get google.golang.org/grpc
      • go get google.golang.org/grpc 报如下错误:go get google.golang.org/grpc: unrecognized import path “google.golang.org/grpc” (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
      • 解决方法,暂没有完备解决方法,除非翻墙
      • 解决办法:
        • 先再go.mod文件中添加依赖,并且在后面添加//indirect
        • 在replace中添加replace
        • 例子:
          replace google.golang.org/grpc => github.com/grpc/grpc-go v1.20.1
          require google.golang.org/grpc v1.20.1 // indirect
        • 然后运行go list -m -json all 刷新下依赖
        • 注意在刷新依赖的过程中要根据包错信息把不能下载的依赖使用replace来替换掉,这和直接go get 不同,直接go get 的依赖如果是翻墙的不会走replace,需要在go.mod中先添加依赖然后刷新依赖才会走replace