在Raspbian上安装Go(Golang)

22

我查看了不同的论坛,但仍然无法使其工作。 我想在我的树莓派 - Raspbian 上安装 Go (Golang):

使用

sudo apt-get install golang

我安装了Go并使用

export GOPATH=$home/pi/gocode

我设置了GOPATH,然后尝试从网站上安装一个新程序(sudo go get -u github.com/....),但是我只得到了“无法下载,未设置$GOPATH。更多细节请参见:go help gopath”。

这个简单的错误让我非常疯狂,我自己没有看出来。

由于我是Linux和Raspbian的新手,所以我希望得到非常详细的“如何操作”说明,适合真正的入门者。谢谢你的帮助。


1
永远不要使用 sudo 进行构建。只需使用 go getgo buildgo install 等命令即可。 - JimB
正如 @JimB 所说,不要使用sudo运行go命令。你只需要用 sudo apt-get 安装它,你已经做到了。只是想让你知道,在进行导出时,你已将GOPATH设置为你的用户。但当你以 sudo 运行某些命令时,你正在以 root 用户身份运行命令,而该用户尚未设置GOPATH。sudo -> "作为超级用户执行" - artberri
另外,如果你遇到了$GOPATH未设置的错误,那么你可能正在使用旧版本的Go。你可以尝试直接从golang.org下载二进制安装包,如果有适用于你的操作系统/架构的话。 - JimB
如何使Go工作:在一个新文件夹(例如download)中下载最新版本的Gogo1.9.linux-armv6l.tar.gz,放在一个新目录中,例如download使用以下命令进行安装sudo apt-get install golang安装旧版本的Go(golang),在我的情况下是1.7.4然后使用以下命令sudo tar -C /home/pi -xzf go1.9.linux-armv6l.tar.gz - heiko
安装Go 1.9版本在新目录中(我这里是home/pi/go)执行以下命令:sudo apt remove golangsudo apt-get autoremove删除旧版本的Go。检查安装是否成功:go version会显示当前安装的Go版本,应该是go1.9 linux/arm。验证安装路径:go env或go env GOPATH - heiko
使用以下命令在 /home/pi/ 目录下列出所有文件并显示 ~/.profile:ls -a使用以下命令打开该文件并添加推荐的代码以设置 go 目录:sudo nano ~/.profileexport GOROOT=/home/pi/go export GOPATH=/home/pi/go/bin保存并关闭文件,使用 STRG + O 和 ENTER,然后使用 STRG + X。检查 GOPATH 是否正确:go env GOPATH然后使用以下命令使更改生效:source ~/.profile现在,go 应该正在运行最新版本,并且应该具有正确的 GOPATH 目录。对我有帮助的是: https://tecadmin.net/install-go-on-debian/# - heiko
3个回答

38

以下是关于如何从仓库在Raspbian Stretch上安装Go的详细说明。

截至今天,2018-01-30,这将安装Go 1.7。手动安装最新版本下载为Go 1.9.3。

I. 登录到您的Raspberry Pi用户上(我使用默认的用户pi)。

II. 安装Go(golang)。

pi@pi3-2:~ $ sudo apt update 
pi@pi3-2:~ $ sudo apt install golang

三. 在你的 $HOME 目录下为所有 Go 项目创建一个工作目录。最好将其命名为 go,因为这在未来的 Go 版本中(从 Go 1.8 开始)将默认为 GOPATH。

pi@pi3-2:~ $ mkdir go

四、将$GOPATH环境变量和修改后的PATH设置追加到您的.profile文件中

pi@pi3-2:~ $ echo 'export GOPATH=$HOME/go' >> ~/.profile
pi@pi3-2:~ $ echo 'PATH="$HOME/go/bin:$PATH"' >> ~/.profile

五. 注销并使用新设置重新登录,然后检查您的设置。

pi@pi3-2:~ $ go env

GOARCH="arm"
GOBIN=""
GOEXE=""
GOHOSTARCH="arm"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/pi/go"
GORACE=""
GOROOT="/usr/lib/go-1.7"
GOTOOLDIR="/usr/lib/go-1.7/pkg/tool/linux_arm"
CC="gcc"
GOGCCFLAGS="-fPIC -marm -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build187598155=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"

特别确保GOPATH指向你先前创建的Go工作目录。不要担心设置GOBIN,因为在某些文档中提到它通常是不必要的,而且Go会自动使用$GOPATH/bin/来安装Go。

但是,您可能还想检查路径设置(应包括/home/pi/go/bin)以确保您可以运行通过go install安装的代码。

pi@pi3-2:~ $ echo $PATH
/home/pi/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

VI. 关于Go工作目录结构的几句话

随着时间推移,Go工作目录将包含三个子目录:bin、src和pkg。除了src之外,它们将在第一次需要时自动创建。对于用户pi,目录结构如下:

/home
  /pi
    /go
      /src
      /pkg
      /bin

bin 目录包含使用 go install 命令安装的所有 Go 可执行文件。

pkg 目录包含所有编译成可导入项目的程序包。

src 目录包含所有源代码文件,可以是自己的代码,也可以是从外部存储库下载的源代码。

例如,命令go get github.com/petergloor/hello-go将自动从相应的 Github 存储库获取并将源代码文件放置到本地目录$HOME/go/src/github.com/petergloor/hello-go中。

由于获取外部存储库以供参考或贡献而言非常普遍,因此保持目录结构始终井然有序和清洁变得很重要。

除此之外,只要在 $HOME/go/src/ 目录下保持分层结构并遵循文档中提到的规则,您就可以随意组织项目。

但是,为了清晰地组织我的项目,即使没有外部存储库,我个人也总是把我的项目放到 $HOME/go/src/github.com/my-github-account 中。

如果您没有 GitHub 帐户,同样可以使用任何其他外部存储库帐户。

正如我所提到的,即使完全没有必要,我也喜欢使用我的 GitHub 帐户来清晰地标识我的项目。即使不需要,我也会在以下示例中使用用户名 pi 来区分用户和其他项目维护者。

VII. 现在我们添加一个“hello world”项目来测试我们的安装。

a)首先,让我们创建项目文件夹并切换到其目录。

pi@pi3-2:~ $ mkdir -p $HOME/go/src/pi/helloworld
pi@pi3-2:~ $ cd $HOME/go/src/pi/helloworld
pi@pi3-2:~/go/src/pi/helloworld $

b) 用您选择的编辑器创建一个名为 main.go 的文件,其内容如下:

// helloworld project main.go.
package main

import ("fmt")

// main is the entrypoint of the application.
func main() {
  fmt.Println("Hello world! Greetings from Raspberry Pi")
}

现在不需要在意空格。Go提供了一个很好的工具来帮助你。

c) 现在尝试运行程序。

pi@pi3-2:~/go/src/pi/helloworld $ go run main.go
Hello world! Greetings from Raspberry Pi
pi@pi3-2:~/go/src/pi/helloworld $

如果出现错误,修复它!仔细检查拼写和大小写(Go区分大小写)。

d) 接下来让我们格式化代码:

pi@pi3-2:~/go/src/pi/helloworld $ go fmt

如果没有文件名,这将正确地重新格式化该目录及其下面所有源文件。

e) 接下来,让我们在此目录中构建helloworld可执行程序。

pi@pi3-2:~/go/src/pi/helloworld $ go build
pi@pi3-2:~/go/src/pi/helloworld $ ls
helloworld  main.go
pi@pi3-2:~/go/src/pi/helloworld $

f)现在你可以运行它。

pi@pi3-2:~/go/src/pi/helloworld $ ./helloworld
Hello world! Greetings from Raspberry Pi
pi@pi3-2:~/go/src/pi/helloworld $

g)最后,让我们将程序安装到$HOME/go/bin/目录中。

pi@pi3-2:~/go/src/pi/helloworld $ go install
pi@pi3-2:~/go/src/pi/helloworld $ ls $HOME/go/bin
hello-go  helloworld
pi@pi3-2:~/go/src/pi/helloworld $

h)如果一切都做得正确,它可以由我们的“pi”用户从任何地方运行,只需输入命令的名称。

pi@pi3-2:~/go/src/pi/helloworld $ helloworld
Hello world! Greetings from Raspberry Pi
pi@pi3-2:~/go/src/pi/helloworld $ cd ~
pi@pi3-2:~ $ helloworld
Hello world! Greetings from Raspberry Pi
pi@pi3-2:~ $
恭喜你!

2
谢谢@Peter。我按照你写得很清楚的步骤做了,一切都正常!这应该是被采纳的答案。 - Mohammed Swillam
虽然这些指令非常棒,对于测试新的Go语言工具安装非常有用,但是将helloworld目录放在$HOME/go/src目录下会阻止使用go get -u [github.com/user/go-pkg]更新包。go get命令会抱怨在src目录中有一个未被版本控制系统初始化的目录。请参见此链接 - ipatch

3
截至2019年11月。(请注意,如果您需要版本1.13+,请手动下载go1.13.3.linux-amd64.tar.gz或使用sudo apt-get install golang-go来安装 - 来源 您只需在您的RPi上键入以下命令:
sudo apt-get update
sudo apt-get install golang --fix-missing

当您输入 go version,下面应该是您的输出结果。
pi@rpi1:~ $ go version
go version go1.11.6 linux/arm

此外,在运行所有内容之前,我还安装了以下内容:sudo apt-get install make gcc g++

这里输入图片描述


-2
如何安装Golang:
下载最新的tarball:go1.9.linux-armv6l.tar.gz 并保存在目录中,例如/home/pi/downloads
然后使用以下命令: sudo tar -C /home/pi -xzf go1.9.linux-armv6l.tar.gz 将Go安装到目录/home/pi并创建/home/pi/go
使用以下命令检查: go version 它将给出实际的Go版本,应该是go1.9 linux/arm。
请使用以下命令检查: go envgo env GOPATH 以确定GOPATH目录位置。
/home/pi/目录下运行以下命令: ls -a # (查看所有文件,并显示~/.profile) 使用以下命令编辑~/.profile文件: sudo nano ~/.profile

你可以打开那个文件并添加推荐的代码到go目录中

 export GOROOT=/home/pi/go
 export GOPATH=/home/pi/go/bin

关闭使用 STRG+O 和 ENTER 以及 STRG+X

检查使用:

go env GOPATH

然后使用:

source ~/.profile

接着可以再次检查使用:

go env

现在 Go 应该正在运行最新版本,并且应该有正确的 GOPATH 目录。

对我有帮助的是这个链接:https://tecadmin.net/install-go-on-debian/#

我真的希望其他人也能详细描述如何简明详细地安装程序,而不是只用三行单独的代码。


1
关于这个问题,我还有一个评论:在 ~/.profile 文件中添加以下内容:export GOPATH=/home/pi/goexport PATH=$PATH:/home/pi/go/bin否则,在尝试运行 Go 时会出现错误。但是现在它完美地工作了,没有任何错误,即使使用旧版本的 Golang 1.7.4。因此,我真的希望这可以帮助其他人或者我自己,在再次设置时。 - heiko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接