Go语言程序结构分析初探
每一種編程語言都有自己的語法、結(jié)構(gòu)以及自己的風(fēng)格,這也是每種語言展現(xiàn)各自魅力及眾不同的地方。Go也不例外,它簡單而優(yōu)雅,與此同時(shí)使用起來也很有趣。在本文中,我們將討論以下幾點(diǎn):
-
Go程序結(jié)構(gòu)
-
如何運(yùn)行Go程序
-
Go中的注釋
-
分號
-
代碼回顧
?
Go程序結(jié)構(gòu)
要理解Go程序的結(jié)構(gòu),首先需要有一個(gè)Go程序,讓我們重溫一下最受歡迎的Hello, World!程序。
package main?
import "fmt"?
func main() {
??? fmt.Println("Hello,World!")
}
?
每個(gè)源文件(擴(kuò)展名為.go的文件)必須有一個(gè)包聲明。在上面的helloworld.go文件中,第一行聲明了包main,其含義是告訴編譯器這個(gè)源文件將包含go的入口點(diǎn),是主函數(shù)。main包的聲明和main函數(shù)的組合使其成為獨(dú)立的、可執(zhí)行的Go程序。
在我們的代碼中,我們將信息寫入控制臺,這是一個(gè)標(biāo)準(zhǔn)輸出。為此,要使用import關(guān)鍵字導(dǎo)入fmt包。fmt包是format單詞的縮寫,它與Go標(biāo)準(zhǔn)庫一起提供給開發(fā)人員。fmt包提供了許多寫入到標(biāo)準(zhǔn)輸出的方式(類似fmt.Println的一系列變種)。此外,稍后可以看到導(dǎo)入多個(gè)包場景。
?
如何運(yùn)行Go程序
我們可以使用go run或go build命令運(yùn)行任何Go程序。使用這些命令可以指示Go編譯器編譯和運(yùn)行Go代碼。要運(yùn)行上面的Hello World程序,可以在程序文件當(dāng)前目錄中使用go run helloworld.go命令。
go run helloworld.go
我們還可以使用go build命令,該命令將生成一個(gè)名為helloworld的可執(zhí)行文件,該文件可以像任何其他exe可執(zhí)行文件一樣執(zhí)行。命令如下:
go build
?
如果出于某種原因,我們想要更改可執(zhí)行文件的名稱,那么可以使用go build -o?命令來更改。這將創(chuàng)建一個(gè)具有指定的名稱的可執(zhí)行二進(jìn)制文件。例如:
$ go build -o exe? #being in thehello-world directory
$ ./exe??????????? # running theexecutable
Hello, World!
根據(jù)需要,我們可能想要安裝應(yīng)用程序。為此,可以使用go install <package-name>?命令。這將創(chuàng)建一個(gè)二進(jìn)制可執(zhí)行文件,并將其存儲在$GOPATH/bin目錄中。因此,確保設(shè)置了GOBIN并將其添加到PATH環(huán)境變量中。此外,如果設(shè)置了PATH環(huán)境變量,可以在系統(tǒng)的任何地方運(yùn)行該二進(jìn)制文件。如下所示:
go install helloworld
?
Go中的注釋
在合適的位置向代碼中添加注釋與編寫高質(zhì)量的、可維護(hù)的代碼同樣重要。在Go中,注釋不僅僅是在代碼中添加內(nèi)聯(lián)解釋的一種方式,它也是將api文檔化的一種方式,我們在討論函數(shù)時(shí)將看到這一點(diǎn)。
?
有兩種方法可以在代碼中添加注釋:行注釋或塊注釋。要添加行注釋,只需以//開頭,后面跟著注釋掉的文本。要添加塊注釋,我們在/*和*/符號之間換行文本。以下是例子:
// package main defines the entry point
package main
// import the 'fmt' package from standard library
import "fmt"
/*
??? The main function is the entrypoint in a Go program.
??? The main function does not havea return type.
??? Also, it does not accept anyparameters.
*/
func main() {
??? fmt.Println("Hello,World!")
}
?
分號
正如在上面的代碼中所看到的,我們的代碼中沒有使用任何分號。那是因?yàn)镚o會在幕后實(shí)現(xiàn)這些。與C語言一樣,Go的語法也使用分號來終止語句,但它們不必出現(xiàn)在源代碼中。
?
Go的文檔是這樣說的:
與C語言一樣,Go的正式語法使用分號來終止語句,但與C語言不同的是,這些分號不會出現(xiàn)在源代碼中。相反,詞法分析程序使用一個(gè)簡單的規(guī)則在掃描時(shí)自動插入分號,因此輸入文本基本上不需要分號。
?
大致規(guī)則如下:如果換行符之前的最后一個(gè)標(biāo)記是一個(gè)標(biāo)識符(包括int和float64這樣的單詞),一個(gè)基本的文字(如數(shù)字或字符串常量),或一個(gè)特殊指令(如break/continue/fallthrough/return/++/--)。詞法分析程序總是在以上指令后面插入分號。可以總結(jié)為:“如果換行符出現(xiàn)在可以結(jié)束語句的標(biāo)記之后,那么插入一個(gè)分號”。分號也可以在右大括號前省略,因此諸如break/continue/fallthrough/return/++/--等不需要分號。
要關(guān)于內(nèi)部的內(nèi)容,請繼續(xù)閱讀go官方文檔。
?
代碼回顧
正如所述,每個(gè)獨(dú)立應(yīng)用程序都必須有一個(gè)package main的聲明,而帶有這種聲明的.go文件必須有一個(gè)main函數(shù)。這個(gè)main函數(shù)是應(yīng)用程序的入口點(diǎn),就像在其他編程語言(如C、Java、c#等)中一樣。
?
區(qū)別在于,在Java或c#中,main函數(shù)可以接受參數(shù),如(string[]args);而在Go中,main函數(shù)不接受任何參數(shù),而且main函數(shù)不返回任何數(shù)據(jù)。
?
注意以下代碼是如何導(dǎo)入fmt包的:import “fmt”。此語法僅在導(dǎo)入單個(gè)包時(shí)有效。如果想導(dǎo)入多個(gè)包,那么需要在import()中將包分組。下面是一個(gè)例子:
// importing multiple packages in Go
import (
"context"
"database/sql"
"fmt"
"log"
)
注意上面代碼中在任何導(dǎo)入包的末尾沒有分號,這將由詞法分析器來完成。
?
總結(jié)
Go有一個(gè)非常簡單的程序結(jié)構(gòu),感覺讀起來更像c。遵循相同的模式,將main函數(shù)作為應(yīng)用程序的入口點(diǎn)。Go提供了一種方便的方法來編寫簡潔的代碼,自動且巧妙地在合適位置插入分號。Go提供了不同的注釋類型在代碼中作描述(與多種主流語言一致),并且能基于注釋快速構(gòu)建文檔。
?
為了更好地理解幕后的技術(shù)細(xì)節(jié)以及如何在Go中編寫高質(zhì)量的代碼,強(qiáng)烈建議閱讀Go文檔中Effective Go頁面。
原文作者:Gaurav Gahlot??譯者:江瑋
原文鏈接:https://dzone.com/articles/structure-of-a-go-program?fromrel=true
版權(quán)聲明:本文版權(quán)歸作者(譯者)及公眾號所有,歡迎轉(zhuǎn)載,但未經(jīng)作者(譯者)同意必須保留此段聲明,且在文章頁面明顯位置給出,本文鏈接如有問題,可留言咨詢。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/10313041.html
總結(jié)
以上是生活随笔為你收集整理的Go语言程序结构分析初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Kafka: 优化部署的1
- 下一篇: JAVA开发者的Golang快速指南