以下是关于如何从仓库在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 的文件,其内容如下:
package main
import ("fmt")
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:~ $
恭喜你!
sudo
进行构建。只需使用go get
、go build
、go install
等命令即可。 - JimBsudo apt-get
安装它,你已经做到了。只是想让你知道,在进行导出时,你已将GOPATH设置为你的用户。但当你以sudo
运行某些命令时,你正在以root
用户身份运行命令,而该用户尚未设置GOPATH。sudo
-> "作为超级用户执行" - artberri$GOPATH未设置
的错误,那么你可能正在使用旧版本的Go。你可以尝试直接从golang.org下载二进制安装包,如果有适用于你的操作系统/架构的话。 - JimB