以前总以为,人生最美好的是相遇。后来才明白,其实难得的是重逢。如果说相遇是久别重逢,希望我们别来无恙.--散文集《我在人间凑数的日子》

从零开始的Golang学习-学习笔记(2)

这一篇主要记录了Go 语言的安装和运行环境

平台和架构

Go 语言开发团队开发了适用于以下操作系统的编译器:

  • Linux
  • FreeBSD
  • Mac OS X(也称为 Darwin)
  • (Windows : gc 版本的编译器已经被移植到 Windows 平台上)

你可以获取以下平台上的 Go 1.4 源码和二进制文件:

  • Linux 2.6+:amd64、386 和 arm 架构
  • Mac OS X(Snow Leopard + Lion):amd64 和 386 架构
  • Windows 2000+:amd64 和 386 架构

1. Go 的原生编译器gc

主要基于 Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。( Go从1.5版本开始已经实现自举。Go语言的编译器和链接器都是Go语言编写的

这款编译器使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo 更快,产生更好的本地代码,但编译后的程序不能够使用 gcc 进行链接。

编译器目前支持以下基于 Intel 或 AMD 处理器架构的程序构建。

g = 编译器:将源代码编译为项目代码(程序文本)
l = 链接器:将项目代码链接到可执行的二进制文件(机器代码)
(相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a)

标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结果。

可用的编译器标记如下:

 flags:
 -I 针对包的目录搜索
 -d 打印声明信息
 -e 不限制错误打印的个数
 -f 打印栈结构
 -h 发生错误时进入恐慌(panic)状态
 -o 指定输出文件名 // 详见第3.4节
 -S 打印产生的汇编代码
 -V 打印编译器版本 // 详见第2.3节
 -u 禁止使用 unsafe 包中的代码
 -w 打印归类后的语法解析树
 -x 打印 lex tokens

从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令。Go 语言本身是由 C 语言开发的,而不是 Go 语言(Go 1.5 开始自举)。词法分析程序是 GNU bison,语法分析程序是名为 $GOROOT/src/cmd/gc/go.y 的 yacc 文件,它会在同一目录输出 y.tab.{c,h} 文件。如果你想知道更多有关构建过程的信息,你可以在 $GOROOT/src/make.bash 中找到。大部分目录下都有doc.go文件提供信息。

2. gccgo编译器

一款相对于 gc 而言更加传统的编译器,使用 GCC 作为后端。GCC 是一款非常流行的 GNU 编译器,它能够构建基于众多处理器架构的应用程序。编译速度相对 gc 较慢,但产生的本地代码运行要稍微快一点。它同时也提供一些与 C 语言之间的互操作性。

从 Go 1 版本开始,gc 和 gccgo 在编译方面都有等价的功能。

3. 文件扩展名与包(package)

Go 语言源文件的扩展名很显然就是 .go

C 文件使用后缀名 .c,汇编文件使用后缀名 .s。所有的源代码文件都是通过包(packages)来组织。包含可执行代码的包文件在被压缩后使用扩展名 .a(AR 文档)。

Go 语言的标准库(第 9.1 节)包文件在被安装后就是使用这种格式的文件。

注意 当你在创建目录时,文件夹名称永远不应该包含空格,而应该使用下划线 "_" 或者其它一般符号代替。

Go 环境变量

如果使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go 下。这里列举几个最为重要的环境变量:

  • $GOROOT 表示 Go 在你的电脑上的安装位置,它的值一般都是 $HOME/go,当然,你也可以安装在别的地方。
  • $GOARCH 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
  • $GOOS 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
  • $GOBIN 表示编译器和链接器的安装位置,默认是 $GOROOT/bin,如果你使用的是 Go 1.0.3 及以后的版本,一般情况下你可以将它的值设置为空,Go 将会使用前面提到的默认值。

(目标机器是指运行你的Go 应用程序的机器)

Go 编译器支持交叉编译,也就是说你可以在一台机器上构建运行在具有不同操作系统和处理器架构上运行的应用程序,也就是说编写源代码的机器可以和目标机器有完全不同的特性(操作系统与处理器架构)。

为了区分本地机器和目标机器,你可以使用 $GOHOSTOS 和 $GOHOSTARCH 设置本地机器的操作系统名称和编译体系结构,这两个变量只有在进行交叉编译的时候才会用到,如果你不进行显示设置,他们的值会和本地机器($GOOS 和 $GOARCH)一样。

  • $GOPATH 默认采用和 $GOROOT 一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目录:srcpkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
  • $GOARM 专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。
  • $GOMAXPROCS 用于设置应用程序可使用的处理器个数与核数,详见第 14.1.3 节。

在linux上安装Go

可以根据这个页面找到安装指南和下载地址:Download the Go distribution

具体安装过程如下

1. 设置go环境变量

我们在 Linux 系统下一般通过文件 $HOME/.bashrc 配置自定义环境变量,根据不同的发行版也可能是文件 $HOME/.profile,然后使用 gedit 或 vi 来编辑文件内容。在文件内添加

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/Applications/Go

$GOPATH 可以包含多个工作目录,取决于你的个人情况。如果你设置了多个工作目录,那么当你在之后使用 go get(远程包安装命令)时远程包将会被安装在第一个目录下。

在完成这些设置后,需要在终端输入指令 source .bashrc 以使这些环境变量生效。

2. 安装C 工具

Ubuntu

 sudo apt-get install bison ed gawk gcc libc6-dev make

Centos

yum install bison ed gawk gcc libc6-dev make

3. 拉取Go 源码

下载 Go 的源码包到你的计算机上,然后将解压后的目录 go 通过命令移动到 $GOROOT 所指向的位置。(博主这里下载的是)

 wget https://storage.googleapis.com/golang/go1.14.2.src.tar.gz
 tar -zxvf go1.14.2.src.tar.gz
 sudo mv go $GOROOT

4. 编译

cd $GOROOT/src
./all.bash

5.报错处理?

如果没有报错,请跳过这一步

如果你 之前没有安装过Go,这时候编译会报错

图片摘自csdn

这是由于go 1.5版以后的编译安装需要1.4版本go,所以如果想要通过源码方式安装高版本go,必须先安装好1.4版本的go。

我们要解决这个报错,很简单,只需要安装1.4版本的go即可

这里我选择的安装目录为/root/go1.4/

我们先在这个目录下clone Go 仓库,然后checkout到 1.4 分支,并安装

输入如下代码:

git clone https://github.com/golang/go.git

等待它下载完成

然后

cd go
git branch
git checkout release-branch.go1.4
git branch

之后再运行src/all.bash 安装脚本,稍等一会儿便可安装成功

之后在跑到/root/目录下修改环境变量

cd /root
vi .bashrc

将我们的1.4版本的Go目录加进去

export GOROOT_BOOTSTRAP=$HOME/go1.4/go

然后我们在编译高版本的Go,就可以了

cd $GOROOT/src
./all.bash

稍等一会儿就能编译完成了,这时候应该就不会有报错了

6.测试安装

从 Hello World开始!

使用你最喜爱的编辑器来输入以下内容,并保存为文件名 hello_world1.go

package main

func main() {
	println("Hello", "world")
}

切换到该目录下,运行 go run hello_world1.go ,将会打印出信息:Hello, world

7. 验证安装版本

在终端输入指令 go version 来打印 Go 的版本信息。

8.更新版本

你可以在官网 发布历史 页面查看到最新的稳定版。

Go 的源代码有以下三个分支:

- Go release:最新稳定版,实际开发最佳选择

- Go weekly:包含最近更新的版本,一般每周更新一次

- Go tip:永远保持最新的版本,相当于内测版

在 Mac OS X 上安装 Go

必须使用 Intel 64 位处理器,Go 不支持 PowerPC 处理器。

注意事项

在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安装。你并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。

你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。

通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。

在 Windows 上安装 Go

你可以在 下载页面 页面下载到 Windows 系统下的一键安装包。

在完成安装包的安装之后,你只需要配置 $GOPATH 这一个环境变量就可以开始使用 Go 语言进行开发了,其它的环境变量安装包均会进行自动设置。在默认情况下,Go 将会被安装在目录 c:\go 下,但如果你在安装过程中修改安装目录,则可能需要手动修改所有的环境变量的值。

测试安装,则可以使用指令 go run 运行 hello_world1.go

如果发生错误 fatal error: can’t find import: fmt 则说明环境变量没有配置正确。

如果你想要在 Windows 下使用 cgo (调用 C 语言写的代码),则需要安装 MinGW,一般推荐安装 TDM-GCC。如果你使用的是 64 位操作系统,请务必安装 64 位版本的 MinGW。安装完成进行环境变量等相关配置即可使用。

在 Windows 下运行在虚拟机里的 Linux 系统上安装 Go

如果你想要在 Windows 下的虚拟机里的 Linux 系统上安装 Go,你可以选择使用虚拟机软件 VMware,下载 VMware player,搜索并下载一个你喜欢的 Linux 发行版镜像,然后安装到虚拟机里。安装方法和Linux安装Go相同。

安装目录文件清单

 Go 安装目录($GOROOT)的文件夹结构应该如下所示:

  • /bin:包含可执行文件,如:编译器,Go 工具
  • /doc:包含示例程序,代码工具,本地文档等
  • /lib:包含文档模版
  • /misc:包含与支持 Go 编辑器有关的配置文件以及 cgo 的示例
  • /os_arch:包含标准库的包的对象文件(.a
  • /src:包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言)
  • /src/cmd:包含 Go 和 C 的编译器和命令行脚本

Go 安装好了,就可以开始学习了!

Let's Go!

Kimiato

发表评论

电子邮件地址不会被公开。 必填项已用*标注

隐藏
变装