1.3 Go語(yǔ)言從入門到精通:編寫第一個(gè)Go程序


作者:xcbeyond
瘋狂源自夢(mèng)想,技術(shù)成就輝煌!微信公眾號(hào):《程序猿技術(shù)大咖》號(hào)主,專注后端開(kāi)發(fā)多年,擁有豐富的研發(fā)經(jīng)驗(yàn),樂(lè)于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項(xiàng)目的研發(fā)工作,涉及架構(gòu)設(shè)計(jì)、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對(duì)于Java、微服務(wù)、數(shù)據(jù)庫(kù)、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗(yàn)。 









文章目錄

1、Go語(yǔ)言結(jié)構(gòu)
2、執(zhí)行流程
3、開(kāi)發(fā)注意事項(xiàng)

在開(kāi)始Go語(yǔ)言的基本語(yǔ)法、函數(shù)和高級(jí)特性等之前,讓我們先編寫第一個(gè)Go程序”Hello World!“開(kāi)始,來(lái)了解Go語(yǔ)言最簡(jiǎn)單程序的結(jié)構(gòu)吧,看看Go程序應(yīng)該包括哪些部分,每部分都位于什么位置,Go語(yǔ)言究竟是如何執(zhí)行的。

我們依然從永恒的“hello,world”程序開(kāi)始,hello.go源代碼如下:

package main

import “fmt”

func main() {
// “Hello World!” Go語(yǔ)言程序
fmt.Println(“Hello World!”)
}

讓我們來(lái)看下以上程序的各個(gè)部分:

第一行代碼package main定義了包名。你必須在源文件中非注釋的第一行指明這個(gè)文件屬于哪個(gè)包,如:package main。package main表示一個(gè)可獨(dú)立執(zhí)行的程序,每個(gè) Go 應(yīng)用程序都包含一個(gè)名為 main 的包。
下一行import fmt告訴 Go 編譯器這個(gè)程序需要使用fmt包中的函數(shù)或其他元素,fmt包實(shí)現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。
下一行func main()是程序開(kāi)始執(zhí)行的函數(shù)(入口函數(shù))。main函數(shù)是每一個(gè)可執(zhí)行程序所必須包含的,一般來(lái)說(shuō)都是在啟動(dòng)后第一個(gè)執(zhí)行的函數(shù)(如果有 init() 函數(shù)則會(huì)先執(zhí)行該函數(shù)),等同于Java中的public static void main(String[] agrs)。
下一行 //是注釋,在程序執(zhí)行時(shí)將被忽略。單行注釋是最常見(jiàn)的注釋形式,你可以在任何地方使用以 // 開(kāi)頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開(kāi)頭,并以 */ 結(jié)尾,且不可以嵌套使用,多行注釋一般用于包的文檔描述或注釋成塊的代碼片段。(與其他語(yǔ)言相同)
下一行fmt.Println(...)可以將字符串輸出到控制臺(tái),并在最后自動(dòng)增加換行字符 \n換行。使用fmt.Print("hello, world\n")可以得到相同的結(jié)果。Print和Println這兩個(gè)函數(shù)也支持使用變量,如:fmt.Println(arr)。如果沒(méi)有特別指定,它們會(huì)以默認(rèn)的打印格式將變量 arr 輸出到控制臺(tái),后續(xù)會(huì)單獨(dú)講解fmt包相關(guān)的內(nèi)容。

1、Go語(yǔ)言結(jié)構(gòu)

從上面的hello world程序可以看出,一個(gè)完整Go語(yǔ)言的程序結(jié)構(gòu)由以下幾部分組成:

包聲明
引入包
函數(shù)
變量
語(yǔ)句 & 表達(dá)式
注釋

2、執(zhí)行流程

Go程序源文件是以.go作為后綴的文件,有兩種執(zhí)行流程:

1、將源文件先編譯成可執(zhí)行的二進(jìn)制文件,再運(yùn)行。

編譯源代碼:go build <xx.go>命令,生成可執(zhí)行文件。
運(yùn)行可執(zhí)行文件:直接運(yùn)行可執(zhí)行程序文件。

常用于在Go編譯環(huán)境上編譯生成可執(zhí)行的二進(jìn)制文件,并將可執(zhí)行的二進(jìn)制文件部署在任何沒(méi)有Go編譯環(huán)境的機(jī)器上。
在這里插入圖片描述











2、直接對(duì)源文件執(zhí)行g(shù)o run <xx.go>命令。

常用于開(kāi)發(fā)環(huán)境測(cè)試使用。(go run必須依賴go開(kāi)發(fā)編譯環(huán)境)
在這里插入圖片描述











3、開(kāi)發(fā)注意事項(xiàng)

Go 源文件以 “go” 為擴(kuò)展名,如:hello.go。

Go 應(yīng)用程序的執(zhí)行入口是 main()函數(shù)。

Go 語(yǔ)言嚴(yán)格區(qū)分大小寫。

Go 方法是由一條條語(yǔ)句構(gòu)成,每個(gè)語(yǔ)句后不需要分號(hào);結(jié)束(實(shí)際上Go語(yǔ)言會(huì)自動(dòng)在每行后加分號(hào)),這也體現(xiàn)了Go語(yǔ)言的簡(jiǎn)潔性。

Go 編譯器是一行行編譯的,因此我們一行就寫一條語(yǔ)句,不能把多條語(yǔ)句寫在同一行,否則報(bào)錯(cuò)。

Go 語(yǔ)言定義變量或者import的包如果沒(méi)有使用到,則代碼不能編譯通過(guò)。

大括號(hào)都是成對(duì)出現(xiàn)的。

大括號(hào){不能單獨(dú)放在一行。如:

package main

import "fmt"

func main() 
{	// 錯(cuò)誤,{不能單獨(dú)成行
    fmt.Println("Hello World!")
}
  
Go 語(yǔ)言有內(nèi)置gofmt工具,能夠自動(dòng)整理代碼多余的空白、變量名稱對(duì)齊、并將對(duì)齊空格轉(zhuǎn)換成Tab。