博愛座可能是為了那些需要額外空間或特殊照顧的人而設計,他不總是被使用。但在你需要時,可以坐下。
我們可以將其想像成一個在程式中的佔位符號,一個我們可以使用來忽略或放置不需要的數值或變數的工具。當我們遇到需要處理多個變數或值的情況,但不需要全部都使用到時可以使用。
_ 用來表示一個變數的值將被消失或者不使用。
舉例:
在這邊使用 _ 來忽略變數 b 的值,因為我們最後不會使用到它。
package main
import "fmt"
func main() {
    a, b := 10, 20
    _, c := 30, 40
    fmt.Println("a:", a)
    fmt.Println("c:", c)
}
來看一下,這邊會輸出什麼東西?為什麼呢?
./main.go:6:5: b declared but not used
因為 Go 語言有個特性,當宣告一個變數卻不使用時,編譯器會認為這是一個潛在的錯誤,目的是 避免不必要的宣告。(後面會說 :  Unused variables)
那什麼時候會使用到 _ 呢?
使用多重賦值,但只關心座位類型,其他信息使用空白識別符號 _ 忽略
package main
import "fmt"
func getSpecialSeatInfo() (string, int, bool) {
	// 假設這個函數返回了三個值
	seatType := "博愛座"
	seatNumber := 10
	isOccupied := true
	return seatType, seatNumber, isOccupied
}
func main() {
	seatType, _, _ := getSpecialSeatInfo()
	fmt.Printf("這個座位的類型是:%s\n", seatType)
}
這個座位的類型是:博愛座
是指在程式碼中引入了一個套件或者宣告了一個變數,但卻從未在後續的程式碼中使用它們。
當你在程式碼中 引入一個套件 ,但後續的程式碼中卻 沒有使用 這個套件中的任何功能時,就會產生 未使用的引入 。(但如果你有安裝Extension,它會檢查後自動刪減)
舉裡:
package main
import "fmt"
func main() {
    // 這裡沒有使用 fmt 套件中的任何功能
}
當你 宣告 一個變數,但後續的程式碼中卻 沒有使用 這個變數時,就會產生 未使用的變數 也就是上面程式碼出現的 declared but not used。
引入一個套件,並且 不直接使用 該套件的任何函數、變數或類型,而僅僅是 為了觸發 該 套件中 的 初始化 操作或 副作用 。
可以是引入自己的根目錄檔案:引入資料庫初始化的檔案,但未使用它的功能
// main.go
package main
import (
    "fmt"
    _ "yourapp/database" 
)
func main() {
    fmt.Println("main go")
}
也可以是引入第三方的初始化:
package handlers
import (
	_ "github.com/joho/godotenv/autoload"
)
檢查一個 值 是否回傳了某個 interface 的所有方法。
舉例:博愛座 上的標記並不指明具體是哪一類特殊需求的人可以使用它們。表示不論是一位孕婦、長輩還是行動不便的乘客,只要 符合 這些 特殊需求 之一,都 可以使用 這些座位,而不需要特別知道是哪一種特殊需求。
package main
import "fmt"
// 定義一個特殊需求的介面
type SpecialNeeds interface {
	PrioritySeat() string
}
// 實現不同特殊需求的類型
type Pregnant struct{}
func (p Pregnant) PrioritySeat() string {
	return "提供給孕婦有需要時使用"
}
type Elderly struct{}
func (e Elderly) PrioritySeat() string {
	return "提供長輩有需要時使用"
}
type Disabled struct{}
func (d Disabled) PrioritySeat() string {
	return "提供行動不便者有需要時使用"
}
type WithChild struct{}
func (w WithChild) PrioritySeat() string {
	return "提供給抱小孩的人有需要時使用"
}
func main() {
	// 不同的乘客可以使用相同的特殊需求介面
	passengers := []SpecialNeeds{
		Pregnant{},
		Elderly{},
		Disabled{},
		WithChild{},
	}
	// 檢查並提供特殊協助
	for _, passenger := range passengers {
		fmt.Println(passenger.PrioritySeat())
	}
}
提供給孕婦有需要時使用
提供長輩有需要時使用
提供行動不便者有需要時使用
提供給抱小孩的人有需要時使用
跟一下時事 XD
沒想到博愛座用來解釋 _ 意外的好舉例。
在 Golang 中,空白識別符號 就像是 博愛座,它們允許我們忽略或不需要的值,專注於我們 真正需要 的部分。
就像 博愛座 對所有 有特殊需求的人 都 開放 一樣。