Go环境:
$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/stack/mygo"
GORACE=""
GOROOT="/home/stack/go"
GOTOOLDIR="/home/stack/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
转到版本:
$ go version
go version go1.6 linux/amd64
跑步时出错:
$ sudo -E go get -u golang.org/x/crypto/ssh
package golang.org/x/crypto/ssh
imports bufio: unrecognized import path "bufio"
package golang.org/x/crypto/ssh
imports bytes: unrecognized import path "bytes"
package golang.org/x/crypto/ssh
imports crypto: unrecognized import path "crypto"
package golang.org/x/crypto/ssh
答案 0 :(得分:0)
sudo -E
将您更改为root并保留环境变量。在这种情况下,这些是shell的env变量而不是go
。
您可以详细了解sudo -E的工作原理here
由于您的GOTOOLDIR="/home/stack/go/pkg/tool/linux_amd64"
显示已为用户stack
(可能)安装了该文件,因此您必须使用go get
作为用户stack
答案 1 :(得分:0)
Godep and vendor值得研究。就像像npm和pip这样的包管理器一样,使用项目目录中的依赖项可以防止版本冲突并避免使用$GOPATH
。
更简单的替代方案是Glide。它极大地简化了依赖关系管理,与Godep
和glide.yaml
和glide.lock
文件非常相似,可以控制依赖关系及其版本,而不是Godep.json
。
如果您使用npm
或cargo
,则非常相似:
# Create manifest
$ glide init
# Get packages
$ glide get path/to/package
# Update package
$ glide update
# Remove package
$ glide remove path/to/package
包就像Godep一样保存到vendor/
(默认情况下以任何方式使用Go 1.6)。