一、go專案工程結構
配置好工作目錄後,就可以編碼開發了,在這之前,我們看下go的通用專案結構,這裡的結構主要是原始碼相應地資原始檔存放目錄結構。
1.1 gopath目錄
gopath目錄就是我們儲存我們所編寫原始碼的目錄。該目錄下往往要有3個子目錄:src,bin,pkg。
src ---- 裡面每一個子目錄,就是一個包。包內是Go的原始碼檔案
pkg ---- 編譯後生成的,包的目標檔案
bin ---- 生成的可執行檔案。
1.2 編寫第一個程式
1.在HOME/go的目錄下,(就是GOPATH目錄裡),建立一個目錄叫src,然後再該目錄下建立一個資料夾叫hello,在該目錄下建立一個檔案叫helloworld.go,並雙擊開啟,輸入以下內容:
package mainimport "fmt"func main() { fmt.Println("Hello, World!")}複製程式碼
2.執行go程式
執行go程式由幾種方式
方式一:使用go run命令
step1:開啟終端:
window下使用快捷鍵win+R,輸入cmd開啟命令列提示符
linux下可以使用快捷鍵:ctrl+alt+T
mac下command+空格,輸入termainl
step2:進入helloworld.go所在的目錄
step3:輸入go run helloworld.go命令並觀察執行結果。
方式二:使用go build命令
step1:開啟終端:在任意檔案路徑下,執行: go install hello
也可以進入專案(應用包)的路徑,然後執行: go install
注意,在編譯生成go程式的時,go實際上會去兩個地方找程式包: GOROOT下的src資料夾下,以及GOPATH下的src資料夾下。
在程式包裡,自動找main包的main函式作為程式入口,然後進行編譯。
step2:執行go程式 在/home/go/bin/下(如果之前沒有bin目錄則會自動建立),會發現出現了一個hello的可執行檔案,用如下命令執行: ./hello
1.3 第一個程式的解釋說明
3.2.1 package
在同一個包下面的檔案屬於同一個工程檔案,不用
import
包,可以直接使用在同一個包下面的所有檔案的package名,都是一樣的
在同一個包下面的檔案
package
名都建議設為是該目錄名,但也可以不是
3.2.2 import
import "fmt" 告訴 Go 編譯器這個程式需要使用 fmt 包的函式,fmt 包實現了格式化 IO(輸入/輸出)的函式
可以是相對路徑也可以是絕對路徑,推薦使用絕對路徑(起始於工程根目錄)
點操作 我們有時候會看到如下的方式匯入包
import( . "fmt") 複製程式碼
這個點操作的含義就是這個包匯入之後在你呼叫這個包的函式時,你可以省略字首的包名,也就是前面你調
用的
fmt.Println("hello world")
可以省略的寫成Println("hello world")
別名操作 別名操作顧名思義我們可以把包命名成另一個我們用起來容易記憶的名字
import( f "fmt") 複製程式碼
別名操作的話呼叫包函式時字首變成了我們的字首,即
f.Println("hello world")
_操作 這個操作經常是讓很多人費解的一個操作符,請看下面這個import
import ( "database/sql" _ "github.com/ziutek/mymysql/godrv") 複製程式碼
_操作其實是引入該包,而不直接使用包裡面的函式,而是呼叫了該包裡面的init函式
3.3.3 main
main(),是程式執行的入口。
1.4 包的說明
我們知道原始碼都是存放在GOPATH的src目錄下,那麼多個多個專案的時候,怎麼區分呢?答案是通過包,使用包來組織我們的專案目錄結構。有過java開發的都知道,使用包進行組織程式碼,包以網站域名開頭就不會有重複,比如千鋒的網站是http://www.mobiletrain.org
,我們就可以以mobiletrain.org
的名字建立一個資料夾,我自己的go專案都放在這個資料夾裡,這樣就不會和其他人的專案衝突,包名也是唯一的。
如果有自己的域名,那也可以使用自己的域名。如果沒有個人域名,現在流行的做法是使用你個人的github名,因為每個人的是唯一的,所以也不會有重複。
如上,src目錄下跟著一個個域名命名的資料夾。再以github.com資料夾為例,它裡面又是以github使用者名稱命名的資料夾,用於儲存屬於這個github使用者編寫的go原始碼。