无法安装包

时间:2016-03-30 06:19:17

标签: go

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

2 个答案:

答案 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。它极大地简化了依赖关系管理,与Godepglide.yamlglide.lock文件非常相似,可以控制依赖关系及其版本,而不是Godep.json

如果您使用npmcargo,则非常相似:

# 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)。