iT邦幫忙

0

Golang 每日一小時(Day2)

go
  • 分享至 

  • xImage
  •  

因為有其他語言的經驗,不用從變數、型別、for loop 這樣慢慢學下去,跟 AI 討論了一下,我應該從 Go 的思維模式與生態學起,這時候官方的 A Tour of Go 就派上用場了,不免俗的得先哈囉世界一下。

hello.go

package main

import "fmt"

func main() {
	fmt.Println("Hello, world!")
}

[Running] go run "d:\Program FIles\GoNote\hello.go"
Hello, world!

然而一開始就卡住了,這個 package main 是什麼? 為什麼底下的程式完全沒有用到 package main 這行敘述?
一開始以為是 PHP 的 namespace,但看了一下 .go 的簡化執行流程,這個 package 管的東西看起來又比 namespace 多得多...

package main → func main() → 你的程式開始跑

查了好久,似懂非懂的,只能先以自己的語言統整:

  1. package 可以當成官方強制你模組化,同一個 package 的檔案在編譯後會變成同一包程式,彼此間呼叫不用 import
  2. 程式進入點是 package main 底下的 func main(),其他部分都不會主動執行
  3. main.go 要 import 任何自行開發的套件時,必須 import 套件的 package name,而不是 file name

以下是 GPT 給出的補充:

  1. 同一個資料夾的檔案最好屬於同一個 package,Go 才能把它們編譯成一個 package。
    不同 package(通常不同資料夾)才需要 import。
  2. 唯一例外是 init() 函式,只要 package 被 import,就會自動執行。
    其他 function / 變數沒被呼叫,不會執行,但仍然會被編譯。
  3. 在 Go module 模式下,import 的完整路徑通常是:
    其中 subfolder_name 對應檔案夾名稱,裡面檔案的 package name 必須一致。
    function 名稱大小寫決定跨 package 可見性(大寫 = public, 小寫 = private)。
import "module_name/subfolder_name"

「其中同個資料夾內的檔案最好屬於同一個 package」,有一種以前開發時必須用資料夾區分套件的做法直接被官方採用的感覺,看來我跟 Go 會很合得來。

最後一句話收斂:

Go 的 package 是「編譯單位 + 命名空間」,main package + main() 是程式入口,其他 package 必須 import 才能使用,init() 會自動執行,其它函式則需手動呼叫。

還以為第二天就會把語法學的差不多了,沒想到開頭一個 package 直接把我搥回地上...


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言