第一個程序:HelloWorld
一、go項(xiàng)目工程結(jié)構(gòu)
配置好工作目錄后,就可以編碼開發(fā)了,在這之前,我們看下go的通用項(xiàng)目結(jié)構(gòu),這里的結(jié)構(gòu)主要是源代碼相應(yīng)地資源文件存放目錄結(jié)構(gòu)。
1.1 gopath目錄
gopath目錄就是我們存儲我們所編寫源代碼的目錄。該目錄下往往要有3個子目錄:src,bin,pkg。
src ---- 里面每一個子目錄,就是一個包。包內(nèi)是Go的源碼文件
pkg ---- 編譯后生成的,包的目標(biāo)文件
bin ---- 生成的可執(zhí)行文件。
1.2 編寫第一個程序
1.在HOME/go的目錄下,(就是GOPATH目錄里),創(chuàng)建一個目錄叫src,然后再該目錄下創(chuàng)建一個文件夾叫hello,在該目錄下創(chuàng)建一個文件叫helloworld.go,并雙擊打開,輸入以下內(nèi)容:
packagemain
?
import"fmt"
?
funcmain() {
fmt.Println("Hello, World!")
}
2.執(zhí)行g(shù)o程序
執(zhí)行g(shù)o程序由幾種方式
方式一:使用go run命令
step1:打開終端:
window下使用快捷鍵win+R,輸入cmd打開命令行提示符
linux下可以使用快捷鍵:ctrl+alt+T
mac下command+空格,輸入termainl
step2:進(jìn)入helloworld.go所在的目錄
step3:輸入go run helloworld.go命令并觀察運(yùn)行結(jié)果。
方式二:使用go build命令
step1:打開終端:在任意文件路徑下,運(yùn)行:? go install hello
也可以進(jìn)入項(xiàng)目(應(yīng)用包)的路徑,然后運(yùn)行:? go install
注意,在編譯生成go程序的時,go實(shí)際上會去兩個地方找程序包:GOROOT下的src文件夾下,以及GOPATH下的src文件夾下。
在程序包里,自動找main包的main函數(shù)作為程序入口,然后進(jìn)行編譯。
step2:運(yùn)行g(shù)o程序? 在/home/go/bin/下(如果之前沒有bin目錄則會自動創(chuàng)建),會發(fā)現(xiàn)出現(xiàn)了一個hello的可執(zhí)行文件,用如下命令運(yùn)行:? ./hello
1.3 第一個程序的解釋說明
3.2.1 package
在同一個包下面的文件屬于同一個工程文件,不用import包,可以直接使用
在同一個包下面的所有文件的package名,都是一樣的
在同一個包下面的文件package名都建議設(shè)為是該目錄名,但也可以不是
3.2.2? import
import "fmt" 告訴 Go 編譯器這個程序需要使用 fmt 包的函數(shù),fmt 包實(shí)現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)
可以是相對路徑也可以是絕對路徑,推薦使用絕對路徑(起始于工程根目錄)
點(diǎn)操作我們有時候會看到如下的方式導(dǎo)入包
import(
? ? ."fmt"
)
這個點(diǎn)操作的含義就是這個包導(dǎo)入之后在你調(diào)用這個包的函數(shù)時,你可以省略前綴的包名,也就是前面你調(diào)
用的fmt.Println("hello world")可以省略的寫成Println("hello world")
別名操作別名操作顧名思義我們可以把包命名成另一個我們用起來容易記憶的名字
import(
? ? f"fmt"
)
別名操作的話調(diào)用包函數(shù)時前綴變成了我們的前綴,即f.Println("hello world")
_操作這個操作經(jīng)常是讓很多人費(fèi)解的一個操作符,請看下面這個import
import(
"database/sql"
_"github.com/ziutek/mymysql/godrv"
)
_操作其實(shí)是引入該包,而不直接使用包里面的函數(shù),而是調(diào)用了該包里面的init函數(shù)
3.3.3 main
main(),是程序運(yùn)行的入口。
1.4 包的說明
我們知道源代碼都是存放在GOPATH的src目錄下,那么多個多個項(xiàng)目的時候,怎么區(qū)分呢?答案是通過包,使用包來組織我們的項(xiàng)目目錄結(jié)構(gòu)。有過java開發(fā)的都知道,使用包進(jìn)行組織代碼,包以網(wǎng)站域名開頭就不會有重復(fù),比如千鋒的網(wǎng)站是http://www.mobiletrain.org,我們就可以以mobiletrain.org的名字創(chuàng)建一個文件夾,我自己的go項(xiàng)目都放在這個文件夾里,這樣就不會和其他人的項(xiàng)目沖突,包名也是唯一的。
如果有自己的域名,那也可以使用自己的域名。如果沒有個人域名,現(xiàn)在流行的做法是使用你個人的github名,因?yàn)槊總€人的是唯一的,所以也不會有重復(fù)。
如上,src目錄下跟著一個個域名命名的文件夾。再以github.com文件夾為例,它里面又是以github用戶名命名的文件夾,用于存儲屬于這個github用戶編寫的go源代碼。