配置好工做目錄後,就能夠編碼開發了,在這以前,咱們看下go的通用項目結構,這裏的結構主要是源代碼相應地資源文件存放目錄結構。java
gopath目錄就是咱們存儲咱們所編寫源代碼的目錄。該目錄下每每要有3個子目錄:src,bin,pkg。mysql
src ---- 裏面每個子目錄,就是一個包。包內是Go的源碼文件linux
pkg ---- 編譯後生成的,包的目標文件git
bin ---- 生成的可執行文件。github
1.在HOME/go的目錄下,(就是GOPATH目錄裏),建立一個目錄叫src,而後再該目錄下建立一個文件夾叫hello,在該目錄下建立一個文件叫helloworld.go,並雙擊打開,輸入如下內容:sql
package mainimport "fmt"func main() { fmt.Println("Hello, World!")}複製代碼
2.執行go程序bash
執行go程序由幾種方式函數
方式一:使用go run命令網站
step1:打開終端:ui
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
在同一個包下面的文件屬於同一個工程文件,不用import
包,能夠直接使用
在同一個包下面的全部文件的package名,都是同樣的
在同一個包下面的文件package
名都建議設爲是該目錄名,但也能夠不是
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函數
main(),是程序運行的入口。
咱們知道源代碼都是存放在GOPATH的src目錄下,那麼多個多個項目的時候,怎麼區分呢?答案是經過包,使用包來組織咱們的項目目錄結構。有過java開發的都知道,使用包進行組織代碼,包以網站域名開頭就不會有重複,好比千鋒的網站是http://www.mobiletrain.org
,咱們就能夠以mobiletrain.org
的名字建立一個文件夾,我本身的go項目都放在這個文件夾裏,這樣就不會和其餘人的項目衝突,包名也是惟一的。
若是有本身的域名,那也可使用本身的域名。若是沒有我的域名,如今流行的作法是使用你我的的github名,由於每一個人的是惟一的,因此也不會有重複。
如上,src目錄下跟着一個個域名命名的文件夾。再以github.com文件夾爲例,它裏面又是以github用戶名命名的文件夾,用於存儲屬於這個github用戶編寫的go源代碼。