golang是強型別語言,在撰寫程式時需要明確的定義變數的型別,
在1.18增加了泛型Generic功能,
以下列程式為例:
package main
import "fmt"
func main() {
PrintHi(1)
//PrintHi("hello")
//PrintHi(1.124)
}
func PrintHi(t int) {
fmt.Printf("type:%T,value:%v\n", t, t)
}
輸出結果:
type:int,value:1
如果將PrintHi()
的引數帶入"hello"
、1.1
就會報錯,
但如果也想將其它的類型也使用PrintHi(),就必須這樣寫程式:
package main
import "fmt"
func main() {
PrintHi(1)
PrintHi2("hello")
PrintHi3(1.124)
}
func PrintHi(t int) {
fmt.Printf("type:%T,value:%v\n", t, t)
}
func PrintHi2(t string) {
fmt.Printf("type:%T,value:%v\n", t, t)
}
func PrintHi3(t float32) {
fmt.Printf("type:%T,value:%v\n", t, t)
}
輸出結果:
type:int,value:1
type:string,value:hello
type:float32,value:1.124
這樣寫變複雜又麻煩......
如果透過泛型撰寫函式時就能支援多種類型了
package main
import "fmt"
func main() {
PrintHi(1)
PrintHi("hello")
PrintHi(1.124)
}
// 也可以改成any型別
func PrintHi[T int | float64 | string](t T) {
fmt.Printf("type:%T,value:%v\n", t, t)
}
輸出結果:
type:int,value:1
type:string,value:hello
type:float64,value:1.124
為了補9/17沒發文,所以9/19連發兩篇~