Go起步走 - 檔案基本結構
我們以官方Hello World程式來看一下Go的基本檔案結構:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
整個檔案可以簡單切成3個部分。
1. package
代表內容名稱
package代表這個檔案的內容摘要,同時也是這個檔案的標題,必須在第一行。
例如官方例子中的package main
代表這個檔案內容標題為main
,這是Go內建的規則,亦即在執行.go
的程式時,一定要執行名稱為main
的package,如果沒有,會出現錯誤訊息:
go run: cannot run non-main package
除此之外,每一個專案、套件都會有自己的package名稱,而這個名稱也是我們在後面import時會使用到的名稱。可以自定義:
package my_package
這樣在其他檔案內要import讀取此檔案時,就需要使用my_package
這個名稱。
2. import
代表載入的相依套件
官方例子中所載入的fmt
套件名稱為format的縮寫,主要用於調整及顯示內容之用。
import同時也是管理專案用的工具,假如我們將一個專案切成不同檔案,一定有一個main檔案來import其他檔案,變成以下格式:
package main
import (
"fmt"
"./functions"
"./api"
)
除了fmt
以外,其他就是我們自訂的package名稱,通常這樣寫就代表我們有functions
和api
兩個資料夾,./
代表相對於該main檔案的同一個資料夾路徑。如果不想寫./
這樣這麼醜的符號,Go預設搜尋package是從src
目錄底下開始搜尋,所以可以寫成:
import "github.com/my_account/my_package"
這邊要注意,Go在載入專案時必須遵循這種package來源網址/開發者/package名稱
的命名方式,一方面自己才能認得出來,一方面也是整個Go開發社群的慣例。
另外,import自定義package時要注意:
由於import只能指定資料夾,無法指定檔案
同一個資料夾底下只能有一個package,例如資料夾底下所有檔案的package名稱都統一是
my_package
3. func main()
代表主要執行的程式
如果檔案內的package名稱是main,則function名稱也一定要有一個是main
,作為執行的起始。
如果沒有main function就行,會出現錯誤訊息:
# command-line-arguments
runtime.main_main: main.main: not defined
runtime.main_main: undefined: main.main
當然,除了main之外,我們也可定義其他funcion,但這些function就不會自動執行,而是需要在main function內呼叫。如下:
func hello() {
fmt.Println("Hello World!")
}
func main() {
hello()
}
以上是三個最基本的檔案結構介紹。