1. 程式人生 > >Go語言學習札記——第三章 Go基本的程式設計結構(1)

Go語言學習札記——第三章 Go基本的程式設計結構(1)

第三章Go基本的程式設計結構

Go是一個新的語言。雖然它從其他語言中借鑑了一些特性,但是Go語言的程式設計方式和其他是有本質卻別的。如果只是簡單的將C++Java等程式碼翻譯為Go程式碼是不可能得到最優的Go程式碼的。java程式設計師用java的思維方式程式設計,並不是Go的思維方式。如果採用go的思維方式,一個問題可能有完全不同的解決方法。因此,如果要真正的用好Go語言,理解它的語言特性和設計思想是 很重要的。另外,還要知道Go語言的變成風格,例如命名方式、格式化、程式結構等等,採用通用的方式也便於和其他的Go程式設計師交流。

接下來我們將逐步地學習Go語言,這一章先介紹Go語言基本的程式設計知識包括:語法、變數的宣告、註釋、控制流程等相關知識。

3.1一個簡單的Go應用程式

下面看一個最簡單的Go應用程式,它對一個含有5個數字的陣列進行求和:

程式雖然很小,但是包含了go語言的更多特性。每個Go原始檔開頭都有一個"package"宣告語句,指明原始檔所在的包。同時,我們也可以根據具體的需要來選擇匯入(import語句)特定功能的包。在這個例子中,我們通過匯入“fmt”包來使用我們熟悉的printf函式。 不過在Go語言中,Printf函式的是大寫字母開頭,並且以fmt包名作為字首:fmt.Printf

關鍵字“func”用於定義函式。關鍵字“var用於宣告變數。“len函式是內建函式,用於求陣列或字串的長度。在所有初始化完成後,程式從main包中的main函式開始執行。

常量字串可以包含Unicode字元,採用UTF-8

編碼。實際上,所有的Go語言原始檔都採用UTF-8編碼。

變數宣告語法如下:

var s string="";

這裡有一個"var"關鍵字,後面跟著變數名字和變數的資料型別,再後面可以用符號來進行賦初值。

簡潔是Go的一個目標,變數的定義也有更簡略的語法。Go可以根據初始值來判斷變數的型別, 沒有必要顯式寫出資料型別。也可以這樣定義變數:

        var s = "";

還有更短的寫法:

        s := "";

操作符":="將在Go中宣告同時進行初始化一個變數時會經常使用。下面的程式碼是在"for"中宣告並初始化變數:

for i := 0; i < len(a); i++ {

Go語言的"for"語句和C語言中有幾個不同的地方:第一,forGo中唯一的迴圈語句,Go中沒有while do語句;第二,for的條件語句並不需要用小括號包起來,但是迴圈體卻必須要花括弧,這個規則同樣適用於 ifswitch。後面我們會看到for的一些例子。

在迴圈體中,通過"+="操作符向字串"s"新增要命令列引數和空白。在迴圈結束後,根據命令列是否有"-n"選項,判斷末尾是否要新增換行符。最後輸出結果。

值得注意的地方是"main.main"函式並沒有返回值(函式被定義為沒有返回值的型別)。如果"main.main" 執行到了末尾,就表示成功。如果想返回一個出錯資訊,可用系統呼叫強制退出:

      os.Exit(1)

"os"包還包含了其它的許多啟動相關的功能,例如"os.Args""flag"包的一部分(用來獲取命令列輸入)

程式碼註釋的方式和C++類似:

/* ... */塊註釋
        // ...
行註釋

3.2分號

比較細心的讀者可能發現前面的程式碼中行結尾處基本沒有出現分號“;”。其實在Go語言中,只有在分隔 for迴圈的初始化語句時才經常用到;但是程式碼段末尾的分號一般都是省略的。

當然,你也可以像CJAVA中那樣使用分號。不過在大多數情況下,一個完整語句末尾的分號都是有go編譯器自動新增的——使用者不需要輸入每個分號。

Go是採用語法解析器自動在每行末增加分號,所有你在寫程式碼的時候可以把分號縮略。

這個規則是: 如果一個標記(token)的前一行是識別符號(identifier)(就像"int" "float64"), 比如: 數字,一個字串或一個標記.

break continue fallthrough return ++ -- ) }

那麼語法解析器就會在標記的後面插入分號,也就是說"在標記的後面是個換行,這說明可能是語句的結束,就增加一個分號"

在右括號之前可以省略分號,比如:

go func() { for { dst <- <-src } }()

關於分號的詳細描述,可以檢視Go語言說明文件。不過在實際寫程式碼時,只需要記得一行末尾的分號可以省略就可以了(對於一行寫多個語句的,可以用分號隔開)。還有一個額外的好處是:在退出大括號包圍的子區域時,分號也是可以省略的。

在一些特殊情況下,甚至可以寫出沒有任何分號的程式碼。不過有一個重要的地方:對於"if"後面有大括弧的語句,需要將左大括弧放在"if"語句的同一行,如果不這樣的話可能出現編譯錯誤。 Go語言強制使用將開始大括弧放在同一行末尾的編碼風格。

例如: