Mac下使用brew安装go
大学时写过go的hello world,没有深入研究过,如今项目中需要将nodejs替换为go,且记录一下学习过程;
1.Mac上使用brew安装(brew的使用可以参考我的博客https://www.cnblogs.com/leadership/p/11534116.html),方便快捷
$ brew install go
出现上面的结果说明安装成功,我们打开终端输入go version,查看安装的go版本
2.配置环境变量
查看go的环境变量配置:
$ go env
显示如下:
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/xin.zhu/Library/Caches/go-build"
GOENV="/Users/xin.zhu/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/xin.zhu/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.13/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.13/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/fl/b3fnstgj4hv6k8g2scfs91sw0000gn/T/go-build443202818=/tmp/go-build -gno-record-gcc-switches -fno-common"
事实上安装好后的go已经可以使用了,我们只需要在home下新建go文件夹,就可以在这个目录下创建go项目,如果不想使用默认的home/go文件夹当作工作空间,可以修改go env中的GOPATH=/xxx/xxx。
3.再来一次hello world
在home/go下新建src/hello目录,在该目录中新建hello.go,内容如下:
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
在路径home/go/src/hello下执行 $ go build
然后运行 $ ./hello
输出:hello, world
4.关于环境变量
$GOROOT
表示 Go 在电脑上的安装位置,不需要手动配置
$GOBIN
表示编译器和链接器的安装位置,默认是 $GOROOT/bin
,Go 1.0.3 及以后的版本,可以将它的值设置为空,Go 会使用默认值。
$GOPATH
项目存放目录,默认采用和 $GOROOT
一样的值, Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个包含 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
$GOARCH
表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
$GOOS
表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
$GOARM
专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。
$GOMAXPROCS
用于设置应用程序可使用的处理器个数与核数
Go 编译器支持交叉编译,就是说编写源代码的机器可以和应用程序的机器有完全不同的操作系统或处理器架构。
为了区分本地机器和目标机器,可以使用 $GOHOSTOS
和 $GOHOSTARCH
设置本地机器的操作系统名称和编译体系结构,这两个变量只有在进行交叉编译的时候才会用到,如果不进行显示设置,他们的值会和本地机器($GOOS
和 $GOARCH
)一样。