大學時寫過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
)一樣。