博愛座可能是為了那些需要額外空間或特殊照顧的人而設計,他不總是被使用。但在你需要時,可以坐下。
我們可以將其想像成一個在程式中的佔位符號,一個我們可以使用來忽略或放置不需要的數值或變數的工具。當我們遇到需要處理多個變數或值的情況,但不需要全部都使用到時可以使用。
_
用來表示一個變數的值將被消失或者不使用。
舉例:
在這邊使用 _
來忽略
變數 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 中,空白識別符號
就像是 博愛座
,它們允許我們忽略或不需要的值,專注於我們 真正需要
的部分。
就像 博愛座
對所有 有特殊需求的人
都 開放
一樣。