天天看點

Go語言:1分鐘寫下第一個Go程式,并在終端裡以指令方式運作

這是《Go語言簡易入門》系列内容第5篇,所有内容清單見:https://yishulun.com/books/go-easy/目錄.html

設定環境變量$GOPATH、$PATH

從官網(

https://golang.org/dl/

,國内可以從

https://studygolang.com/dl

下載下傳)下載下傳了Go語言安裝包,并安裝以後,此時在終端裡執行指令:

go version
           

複制

一般都可以顯示版本号了。此時編寫一個簡單的go語言檔案,也可以運作。

但此時Go語言完全運作所需的環境變量還沒有完全準備就緒。一般我們在環境變量中,還需要設定一個名稱為GOPATH的使用者變量或系統變量,同時還需要将GOPATH/bin添加到變量PATH的路徑中。

在macOS上,我們可以在~/.bash_profile中設定使用者變量,也可以在/etc/profile中設定系統變量。在Windows上,我們可以通過計算機屬性->進階屬性->設定變量進行設定。

$PATH路徑的設定與之同理。

為什麼要設定環境變量?

GOPATH變量不設定,不影響運作,它在Go語言安裝包預設安裝後有一個~/go的預設位址,但GOPATH/bin必須添加到PATH的路徑中。這是所有開發者自安裝的Go語言第三方類庫所生成的工具指令,在系統上能夠被查到的基礎,如果不設定,系統不知道去哪裡查找我們在終端裡随意寫出的指令名稱。

舉個例子,gin是一個Go語言編寫的為Go程式提供熱編譯功能的工具。在使用它的時候,我們首先需要安裝它:

go get github.com/codegangsta/gin
           

複制

然後,假設我們本地有一個main.go,可以這樣執行:

gin run main.go // 啟用熱編譯
           

複制

此時用gin代替go,運作main.go,當我們修改了後者的代碼以後,gin可以幫助我們自動重新編譯并啟動後者。這是gin的作用。

但是如果我們沒有将GOPATH/bin放在PATH路徑中,上面的gin指令就運作不了,它會提示一個“指令找不到”的錯誤。

go get可以幫助我們自動拉取類庫源碼,及目标類庫所依賴的類庫源碼(放在了GOPATH/src路徑下),并在本地自動編譯,并将編譯生成的本地二進制可執行檔案拷貝到GOPATH/bin路徑下。如果我們不在

如何驗證環境變量?

所有環境變量設定完成以後,怎麼驗證呢?可以在終端裡,可以使用

go env

檢視所有Go語言相關的環境變量了。當然了,也可以單獨使用echo檢視特定的環境變量。如下所示:

go env // 檢視所有go語言環境變量
go version // 檢視版本
echo $PATH | grep /go/bin
echo $GOPATH
           

複制

補充:

go get

指令到底做了哪些事情?

一個

go get

指令在執行後,相當于執行了以下步驟:

  1. git clone,将所有目标類庫源碼,及目标類庫所依賴的源碼下載下傳到本地
  2. 開始執行go install,第一步是編譯目标類庫導入的封包件,所有被依賴的封包件被編譯後,才能編譯目标類庫
  3. 開始編譯目标類庫的主程式,并将編譯之後的可執行檔案,拷貝至$GOPATH/bin目錄下。如果目标類庫是工具,它一定有一個main函數。

在終端裡運作第一個Go程式

既然我們已經了解了如何在終端裡執行額外的指令,接上來我們自己用Go語言寫一個簡單的程式,然後在終端裡執行。

首先我們建立一個檔案:

mkdir -p $GOPATH/rixingyike/first/main.go
           

複制

并編輯代碼為:

package main

import "fmt"

func main() {
    fmt.Printf("hi,ly\n")
}
           

複制

現在我們執行:

export GO111MODULE=off
go install rixingyike/first
           

複制

正樣的話現在$GOPATH/bin目錄下已經多了一個名稱為first的二進制可執行檔案。在終端裡可以執行它了:

first // output: hi,ly
           

複制

在上面我們編譯源碼之前,為什麼要先設定Go環境變量GO111MODULE等于off呢?可以把它設定為on,再試一下。這關系到Go語言的模式化,以下再講。

我講明白沒有,歡迎留言。

2021年1月21日

本文撰寫過程中參考了以下連結,一并緻謝:

  • https://blog.csdn.net/qq_34777600/article/details/81319961
  • https://go-zh.org/doc/code.html
  • https://github.com/codegangsta/gin

本文有視訊,請檢視“程式員LIYI”視訊号的“#Go語言簡易入門”标簽: