嗚嗚嗚... 不小心斷賽了😢
在地鼠界中,有一個特殊的方法,他叫做「init」!
換句我們的行話裡,這用於初始化的步驟。無需額外的動作,在程序運行時自動執行。通常我們會用在執行一些初始化操作,像是設置全域變數、設定、Database相關等。以下就讓我來細細道來 💪
首先,Show you simple demo。
package main
import "fmt"
func init() {
fmt.Println("Init first")
}
func main() {
fmt.Println("Main Second")
}
來,你猜猜結果會是?
.
.
.
我的程式都已經告訴你答案了😅
Init first
Main Second
init
會首先被執行、再來才會是main
!
你看吧!是不是很特別的魔法?以下讓我們看個更實際的例子。
剛剛提到了init
常用於載入設定,以下就是這段程式碼的demo
我們先準備一個叫做config.txt
的文件
host=localhost
port=3306
database=demo
user=root
password=pass
接下來,程式碼底家!
package main
import (
"fmt"
"strings"
"io/ioutil"
)
var config map[string]string
func init() {
// 載入
data, err := ioutil.ReadFile("config.txt")
if err != nil {
fmt.Println("Error: ", err)
return
}
// 解析
lines := strings.Split(string(data), "\n")
config = make(map[string]string)
for _, line := range lines {
parts := strings.Split(line, "=")
if len(parts) == 2 {
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
config[key] = value
}
}
fmt.Println("Configure Loaded")
}
func main() {
// 在這裡印出資訊
for key, value := range config {
fmt.Printf("Key: %s, Value %s\n", key,value)
}
}
在這裡,我們在init函數中讀取文件,然後存到在config中。這樣,我們就可以在main函數中使用了。Oh Ya ✌️
總而言之,init方法是個方便的初始化魔法,它能在程式運行時自動執行,可用於執行各種初始化操作,使程序更具靈活性和可維護性,甚至也可以搭配go build tag 讓我們根據環境來載入不同的設定!以方便我們能客制出不同的CICD流程與初始化