我們可以透過以下三個問題 hello_world.go
來探討 Go 的背後機制。
package main
是什麼意思?import fmt
是什麼意思?func main
是什麼?package main
是什麼意思?package 主要分成兩種,一種是 executable (可執行的);另外一種則是 reusable(可重複使用的),而 package main
就是指可執行的檔案。
因此包含 package main
的 Go 檔案,透過 go build
操作時(像是 hello_world.go)
,就會產出一個 hello_world.exe
,最終電腦是根據這個 exe
檔案去執行相關操作。
此時假設我們創造一個相加的 package,叫做 calculator
,我們就會這樣撰寫成這樣
// calculator.go
package calculator
func addTwoNums(num1 int , num2 int )int {
return num1+num2
}
這樣的 package name 的話,就不會被 Go 認定為可執行檔,因此即便操作 go build calculator.go
,也不換產生執行檔,換言之,電腦不會實際跑內部所寫的程式。
此時如果我們要印出 calculator.go
裡面的結果,可以寫一個可執行檔案,寫上package main
,並將相關套件 import 進來,像是以下
package main
import (
'calculator',
'fmt'
)
func main(){
fmt.Println(calculator.addTwoNums(3,4))
}
則可以將相關的 package 拿來使用。
import fmt
是什麼意思?延續上一題,這邊就相對好懂了,這個 fmt
就是一個 go 的內建標準 package(像是 python module),當我們下載 Go 的時候,就ㄧ併被下載下來了,因此我們可以直接 import 進來使用。當未來內建標準 package 不夠我們用時,我們開始需要下載其他人的 package 來使用時,就要接著講到 GOPATH 跟 go install
和 go get
了,我們未來會開一篇來討論的~
func main
是什麼?這邊筆者也還沒摸透,但簡單來說,就是包含 package main 的檔案中,最終會被執行的相關程式都需要被放在 func main
裡面才會被執行,如果寫在 func main
外頭,就會有以下報錯內容syntax error: non-declaration statement outside function body
簡單來說,就是 Go 限制你不能這樣操作。所以 Go 的寫法是這樣,你在 func main
外面,寫下其他的 function,再一併在 main 內執行。如下示範:
package main
import (
"fmt"
)
func addTwoNums(num1 int , num2 int )int {
return num1+num2
}
func main() {
fmt.Println(addTwoNums(3,4))
}
以上,大致上講解到 Go 程式檔是如何運作,以及內部相關專有名詞的用法與限制~
還請各位大大看有沒有理解錯誤,可以給我一些反饋,感謝!