golang 泛型_Golang 1.x版本泛型编程
生活随笔
收集整理的這篇文章主要介紹了
golang 泛型_Golang 1.x版本泛型编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文介紹了Golang 1.x版本的泛型編程。
往期回顧:淺談動態追蹤技術
Go是一門天生為服務器程序設計的簡潔的語言,因此Go的設計原則聚焦在可擴展性、可讀性和并發性,而多態性并不是這門語言的設計初衷,因此就被放在了一邊。雖然在2.0版本之前還沒有泛型的支持,但是Go自帶的一些語言特性可以滿足一些類似“泛型”的要求,比如內置類型:
array
slice
map
chan
這四種類型可以用任意類型的元素初始化,例如map[yourtype]bool就可以用來實現任意元素的集合。Go的一些內置函數也是通用的,比如len()既可以用于string, array, slice, 也可以用于求map的長度。
但是如果golang內置結構和函數不能滿足需求,可以從以下幾種方法來入手:
01
類型斷言
當你想實現一個通用函數的時候,會考慮傳入的參數是不是固定類型的,Go正好提供了interface{}類型,它可以代表任意類型。當你不確定用什么類型合適的時候,用它就對了。舉個簡單的例子:
type Container struct {elem []interface{}
}func (this *Container) Put(v interface{}) {
*this = append(*this, elem)
}// 取出最后一個元素func (this *Container) Get() interface{} {
ret := (*c)[len(*c)-1]
*c = (*c)[:len(*c)-1] return ret
}func assertExample() {
container := &Container{}
container.Put(1)
container.Put("Hello")
_, ok := container.Get().(int);!ok {
fmt.Println("Unable to read an int from container")
}
}
總結
以上是生活随笔為你收集整理的golang 泛型_Golang 1.x版本泛型编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 养羊50只一年赚多少钱(养50只羊并不像
- 下一篇: 原码一位乘法器设计_十分钟带你彻底搞懂原