天天看點

Go語言程式結構分析初探

每一種程式設計語言都有自己的文法、結構以及自己的風格,這也是每種語言展現各自魅力及衆不同的地方。Go也不例外,它簡單而優雅,與此同時使用起來也很有趣。在本文中,我們将讨論以下幾點:

Go程式結構

如何運作Go程式

Go中的注釋

分号

代碼回顧

要了解Go程式的結構,首先需要有一個Go程式,讓我們重溫一下最受歡迎的Hello, World!程式。

package main

import "fmt"

func main() {

fmt.Println("Hello,World!")
           

}

每個源檔案(擴充名為.go的檔案)必須有一個包聲明。在上面的helloworld.go檔案中,第一行聲明了包main,其含義是告訴編譯器這個源檔案将包含go的入口點,是主函數。main包的聲明和main函數的組合使其成為獨立的、可執行的Go程式。

在我們的代碼中,我們将資訊寫入控制台,這是一個标準輸出。為此,要使用import關鍵字導入fmt包。fmt包是format單詞的縮寫,它與Go标準庫一起提供給開發人員。fmt包提供了許多寫入到标準輸出的方式(類似fmt.Println的一系列變種)。此外,稍後可以看到導入多個包場景。

我們可以使用go run或go build指令運作任何Go程式。使用這些指令可以訓示Go編譯器編譯和運作Go代碼。要運作上面的Hello World程式,可以在程式檔案目前目錄中使用go run helloworld.go指令。

go run helloworld.go

我們還可以使用go build指令,該指令将生成一個名為helloworld的可執行檔案,該檔案可以像任何其他exe可執行檔案一樣執行。指令如下:

go build

如果出于某種原因,我們想要更改可執行檔案的名稱,那麼可以使用go build -o 指令來更改。這将建立一個具有指定的名稱的可執行二進制檔案。例如:

$ go build -o exe #being in thehello-world directory

$ ./exe # running theexecutable

Hello, World!

根據需要,我們可能想要安裝應用程式。為此,可以使用go install 指令。這将建立一個二進制可執行檔案,并将其存儲在$GOPATH/bin目錄中。是以,確定設定了GOBIN并将其添加到PATH環境變量中。此外,如果設定了PATH環境變量,可以在系統的任何地方運作該二進制檔案。如下所示:

go install helloworld

在合适的位置向代碼中添加注釋與編寫高品質的、可維護的代碼同樣重要。在Go中,注釋不僅僅是在代碼中添加内聯解釋的一種方式,它也是将api文檔化的一種方式,我們在讨論函數時将看到這一點。

有兩種方法可以在代碼中添加注釋:行注釋或塊注釋。要添加

買手機号

行注釋,隻需以//開頭,後面跟着注釋掉的文本。要添加塊注釋,我們在/和/符号之間換行文本。以下是例子:

// 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.
           

*/

fmt.Println("Hello,World!")
           

正如在上面的代碼中所看到的,我們的代碼中沒有使用任何分号。那是因為Go會在幕後實作這些。與C語言一樣,Go的文法也使用分号來終止語句,但它們不必出現在源代碼中。

Go的文檔是這樣說的:

與C語言一樣,Go的正式文法使用分号來終止語句,但與C語言不同的是,這些分号不會出現在源代碼中。相反,詞法分析程式使用一個簡單的規則在掃描時自動插入分号,是以輸入文本基本上不需要分号。

大緻規則如下:如果換行符之前的最後一個标記是一個辨別符(包括int和float64這樣的單詞),一個基本的文字(如數字或字元串常量),或一個特殊指令(如break/continue/fallthrough/return/++/--)。詞法分析程式總是在以上指令後面插入分号。可以總結為:“如果換行符出現在可以結束語句的标記之後,那麼插入一個分号”。分号也可以在右大括号前省略,是以諸如break/continue/fallthrough/return/++/--等不需要分号。

要閱讀更多關于内部的内容,請繼續閱讀go官方文檔。

正如所述,每個獨立應用程式都必須有一個package main的聲明,而帶有這種聲明的.go檔案必須有一個main函數。這個main函數是應用程式的入口點,就像在其他程式設計語言(如C、Java、c#等)中一樣。

差別在于,在Java或c#中,main函數可以接受參數,如(string[]args);而在Go中,main函數不接受任何參數,而且main函數不傳回任何資料。

注意以下代碼是如何導入fmt包的:import “fmt”。此文法僅在導入單個包時有效。如果想導入多個包,那麼需要在import()中将包分組。下面是一個例子:

// importing multiple packages in Go

import (

"context"

"database/sql"

"fmt"

"log"

)

注意上面代碼中在任何導入包的末尾沒有分号,這将由詞法分析器來完成。

總結

Go有一個非常簡單的程式結構,感覺讀起來更像c。遵循相同的模式,将main函數作為應用程式的入口點。Go提供了一種友善的方法來編寫簡潔的代碼,自動且巧妙地在合适位置插入分号。Go提供了不同的注釋類型在代碼中作描述(與多種主流語言一緻),并且能基于注釋快速建構文檔。

為了更好地了解幕後的技術細節以及如何在Go中編寫高品質的代碼,強烈建議閱讀Go文檔中Effective Go頁面。