好的,我已经下载了Go 1.1并将其放入$ HOME / Documents / go。
然后,我将.bashrc
修改为:
export GOPATH=$HOME/Documents/go
export GOROOT=$GOPATH
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
比我来源.bashrc
,并尝试过:
jan@janpc:~$ go version
go version go1.1 linux/amd64
但我无法编译或安装任何依赖项。 例如。我尝试运行我的小测试程序:
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go run scrypt.go
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
scrypt.go:9:3: cannot find package "github.com/dchest/scrypt" in any of:
/home/jan/Documents/go/src/pkg/github.com/dchest/scrypt (from $GOROOT)
($GOPATH not set)
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$
当我尝试安装依赖项时:
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go get "github.com/dchest/scrypt"
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
package github.com/dchest/scrypt: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath
它在mac上编译并正常工作。我无法弄清楚我的配置有什么问题,如果我尝试删除$GOROOT
或$GOPATH
没有任何作用,我不知道还有什么设置它们,除了Go的路径
编辑:
我的mac上没有设置$ GOROOT。但是如果我在ubuntu上删除$GOROOT
,那么当我尝试编译时会出现这样的错误。
cannot find package "fmt" in any of:
/usr/local/go/src/pkg/fmt (from $GOROOT)
/home/jan/Documents/go/src/fmt (from $GOPATH)
答案 0 :(得分:17)
您通过
设置的环境变量$ export GOROOT=$GOPATH
是个错误。没有任何地方需要或建议这样的设置。实际上,它削弱了Go构建系统所看到的环境。
删除该设置,重新创建您的环境(. bashrc
)或打开一个新终端,它应该有效(如果不存在其他问题)。
此外,如果您没有进行交叉编译,我建议同时删除这些:
export GOARCH=amd64
export GOOS=linux
简而言之,正确导出的GOPATH是唯一的环境变量,在第一次近似中,它确实是需要的。更多提示here。
编辑:好的,我已经下载了二进制发行版(go1.1.linux-amd64.tar.gz)。引自README:二进制分发说明
如果您刚刚解压缩了二进制Go发行版,则需要进行设置 环境变量$ GOROOT到go的完整路径 目录(包含此README的目录)。你可以省略 如果将其解压缩到/ usr / local / go,或者重建,则为variable 通过运行all.bash来源(请参阅doc / install.html)。 您还应该添加Go二进制目录$ GOROOT / bin 到你的贝壳之路。
例如,如果您将tar文件解压缩到$ HOME / go,则可能 将以下内容放在.profile中:
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
有关详细信息,请参阅doc / install.html。
从这一点可以清楚地看出,您必须没有正确遵循上述说明。解决这个问题,我希望它会对你有用。
答案 1 :(得分:16)
要安装,请先严重首先删除之前的安装(否则您将收到错误go build fails : runtime/mstkbar.go:151:10: debug.gcstackbarrieroff undefined)
dpkg -l|grep golang # if you see any, run following cmd to remove
sudo apt-get purge golang-*
验证是否仍然安装了
type go # see if go is installed
安装go时的典型输出
go is hashed (/usr/local/go/bin/go)
如果安装go,请将其删除
sudo rm -rf /usr/local/go # not just /usr/local/go/bin/go
下载最新的tarball https://golang.org/dl/展开并安装
new_golang_ver=$(curl https://golang.org/VERSION?m=text 2> /dev/null)
cd /tmp
wget https://dl.google.com/go/${new_golang_ver}.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf ${new_golang_ver}.linux-amd64.tar.gz
在〜/ .bashrc
中定义这些环境变量export PATH=/usr/local/go/bin:${PATH}
export GOPATH=${HOME}/gopath # typical value change at will
export PATH=${GOPATH}/bin:${PATH}
获取上述新的env var定义
source ~/.bashrc
验证安装
go version
如果正确安装了典型输出
go version go1.12.1 linux/amd64
--- 安装完成所以让我们编译一个hello world ---
[[ ! -d $GOPATH ]] && mkdir -p ${GOPATH}/{bin,pkg,src} # if no dir then create
mkdir -p ${GOPATH}/src/github.com/mygithubname/play
cd ${GOPATH}/src/github.com/mygithubname/play
现在粘贴以下来创建go源文件hello_world.go
tee hello_world.go << WOW
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
WOW
编译源代码
go build hello_world.go
./hello_world # run your executable
你好,世界
了解如何构建go源代码,请参阅https://golang.org/doc/code.html
您还询问了如何修复丢失的依赖项错误...例如
scott@rapacious ~/other_src/gopath/src/github.com/bigeagle/gohop $ go build
hop/cipher.go:27:2: cannot find package "github.com/golang/snappy" in any of:
/usr/local/go/src/github.com/golang/snappy (from $GOROOT)
/home/scott/other_src/gopath/src/github.com/golang/snappy (from $GOPATH)
internal/logging.go:6:2: cannot find package "github.com/op/go-logging" in any of:
/usr/local/go/src/github.com/op/go-logging (from $GOROOT)
/home/scott/other_src/gopath/src/github.com/op/go-logging (from $GOPATH)
即使在你的安装设置完成后,上面的错误也会发生OK ...只是发出这个以下载并安装缺少的上游依赖包go(以及他们也可能递归引用的那些)
cd ~/Documents/go/src/github.com/jan/scrypt/ # cd into the source dir
go get -v -t ./... # -v verbose
# -t also download any test only packages
go build
答案 2 :(得分:4)
TLDR:取消设置$GOROOT
,方法是在终端export GOROOT=""
我在Ubuntu 16.04上安装了Go,一切正常。
然后我错误地将$GOROOT
设置为$GOPATH
跟随教程,此时我的构建开始失败说:
warning: GOPATH set to GOROOT has no effect
cannot find package "fmt" in any of:
... (from $GOROOT) ($GOPATH not set)
cannot find package "io/ioutil" in any of:
imports runtime: cannot find package "runtime" in any of:
/home/mhsn/go/src/runtime (from $GOROOT)
($GOPATH not set)
我读到的每个解决方案都建议不要设置这个变量,我想解开这个。我找到了以下修复程序来取消它:bash中的export GOROOT=""
。
将$GOROOT
取消设置为空,这是每个人都推荐的,因此默认返回原始路径。它解决了我的问题,并且开始重新开始工作。
答案 3 :(得分:0)
您不应为正常安装设置$ GOROOT。
只需输入 List<String> strings = new ArrayList<>();
strings.add("aaa");
strings.add("bbb");
strings.add("ccc");
strings.add("ddd");
strings.add("eee");
int position = strings.indexOf("ccc");
即可解决您的问题。