iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
自我挑戰組

Go語言自學挑戰系列 第 18

第十八天:泛型Generics

  • 分享至 

  • xImage
  •  

什麼是泛型Generic

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

這樣寫變複雜又麻煩......

/images/emoticon/emoticon06.gif

如果透過泛型撰寫函式時就能支援多種類型了

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連發兩篇~

/images/emoticon/emoticon07.gif

參考資料

  1. https://zh.wikipedia.org/zh-tw/%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B
  2. https://go.dev/tour/generics/1

上一篇
第十七天:介面interface
下一篇
第二十天:Goroutine介紹(1)
系列文
Go語言自學挑戰29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言