1、創(chuàng)建文件 hello.go,不寫(xiě)入任何內(nèi)容。運(yùn)行 go build hello.go 命令進(jìn)行編譯。將會(huì)輸出如下錯(cuò)誤: can't load package: package main: hello.go:1:1: expected 'package', found 'EOF' 因?yàn)?/span>Go語(yǔ)言中,所有文件必須隸屬于某一個(gè)包。需要在文件的頭部聲明一個(gè)package name,其中package為關(guān)鍵字,name為包名。 2、在hello.go文件中添加一條語(yǔ)句,之后重新進(jìn)行編譯。 添加內(nèi)容如下: package main 執(zhí)行編譯,將會(huì)輸出如下錯(cuò)誤: runtime.main_main·f: relocation target main.main not defined runtime.main_main·f: undefined: "main.main" 因?yàn)?/span>Go程序啟動(dòng)時(shí),需要在文件中有一個(gè)可標(biāo)識(shí)入口。Go程序的入口函數(shù)是main函數(shù)。 3、在hello.go文件中添加另外一行,并且重試。 添加內(nèi)容如下: package main func main(){} 執(zhí)行運(yùn)行命令 go run hello.go ,程序正確執(zhí)行并很快就退出了。 到目前為止,我們已經(jīng)創(chuàng)建了自己的第一個(gè)程序。雖然沒(méi)有功能,但是已經(jīng)可以正常運(yùn)行了。 4、我們繼續(xù)添加功能,添加內(nèi)容如下: package main func main(){ Println("hello world") } 執(zhí)行編譯,將會(huì)輸出如下錯(cuò)誤: 1./hello.go:4:2: undefined: Println 因?yàn)?/span>Println函數(shù)存放在fmt包中。我們程序中沒(méi)有主動(dòng)引入fmt包,所以編譯器報(bào)未定義錯(cuò)誤。 如果我們需要使用這些包中的功能,首先需要import引入相應(yīng)的包。包中的可導(dǎo)出組件可以通過(guò) 包名.組件名的方式進(jìn)行調(diào)用。 函數(shù)Println和其它讀寫(xiě)文本和字符的函數(shù),都存放在一個(gè)叫做fmt的包中——formatting的縮寫(xiě)。 5、再添加幾行代碼,添加內(nèi)容如下: package main import "fmt" func main(){ fmt.Println("hello world") } 執(zhí)行 go run hello.go 命令,運(yùn)行程序。運(yùn)行結(jié)果如下: hello world Go 程序啟動(dòng)執(zhí)行順序如下: 按順序?qū)胨斜?/span> main 包引用的其它包,然后在每個(gè)包中執(zhí)行如下流程: 如果該包又導(dǎo)入了其它的包,則從第一步開(kāi)始遞歸執(zhí)行,但是每個(gè)包只會(huì)被導(dǎo)入一次。 然后以相反的順序在每個(gè)包中初始化常量和變量,如果該包含有 init 函數(shù)的話,則調(diào)用該函數(shù)。 在完成這一切之后,main 也執(zhí)行同樣的過(guò)程,最后調(diào)用 main 函數(shù)開(kāi)始執(zhí)行程序。 |
|