Skip to content

Latest commit

 

History

History
53 lines (31 loc) · 3.25 KB

File metadata and controls

53 lines (31 loc) · 3.25 KB

2.1 你好,Go

在開始編寫應用之前,我們先從最基本的程式開始。就像你造房子之前不知道什麼是地基一樣,編寫程式也不知道如何開始。因此,在本節中,我們要學習用最基本的語法讓 Go 程式執行起來。

程式

這就像一個傳統,在學習大部分語言之前,你先學會如何編寫一個可以輸出 hello world 的程式。

準備好了嗎?Let's Go!

package main

import "fmt"

func main() {
	fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい\n")
}

輸出如下:

Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい

詳解

首先我們要了解一個概念,Go 程式是透過 package 來組織的。

package <pkgName>(在我們的例子中是package main)這一行告訴我們當前檔案屬於哪個套件,而套件名 main 則告訴我們它是一個可獨立執行的套件,它在編譯後會產生可執行檔案。除了 main 套件之外,其它的套件最後都會產生 *.a 檔案(也就是套件檔案)並放置在 $GOPATH/pkg/$GOOS_$GOARCH 中(以 Mac 為例就是 $GOPATH/pkg/darwin_amd64)。

每一個可獨立執行的 Go 程式,必定包含一個 package main,在這個 main 套件中必定包含一個入口函式 main,而這個函式既沒有參數,也沒有回傳值。

為了列印 Hello, world... ,我們呼叫了一個函式 Printf,這個函式來自於 fmt 套件,所以我們在第三行中匯入了系統級別的 fmt 套件:import "fmt"

套件的概念和 Python 中的 package 類似,它們都有一些特別的好處:模組化(能夠把你的程式分成多個模組)和可重用性(每個模組都能被其它應用程式反覆使用)。我們在這裡只是先了解一下套件的概念,後面我們將會編寫自己的套件。

在第五行中,我們透過關鍵字 func 定義了一個 main 函式,函式體被放在 {}(大括號)中,就像我們平時寫 C、C++ 或 Java 時一樣。

大家可以看到 main 函式是沒有任何的參數的,我們接下來就學習如何編寫帶參數的、回傳 0 個或多個值的函式。

第六行,我們呼叫了 fmt 套件裡面定義的函式 Printf。大家可以看到,這個函式是透過 <pkgName>.<funcName> 的方式呼叫的,這一點和 Python 十分相似。

前面提到過,套件名和套件所在的資料夾名可以是不同的,此處的 <pkgName> 即為透過 package <pkgName> 宣告的套件名,而非資料夾名。

最後大家可以看到我們輸出的內容裡面包含了很多非 ASCII 碼字元。實際上,Go 是天生支援 UTF-8 的,任何字元都可以直接輸出,你甚至可以用 UTF-8 中的任何字元作為識別符號。

結論

Go 使用 package(和 Python 的模組類似)來組織程式碼。main.main() 函式(這個函式位於主套件)是每一個獨立的可執行程式的入口點。Go 使用 UTF-8 字串和識別符號(因為 UTF-8 的發明者也就是 Go 的發明者之一),所以它天生支援多語言。

links