最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go1.18都出泛型了速來圍觀

 更新時(shí)間:2022年03月17日 14:12:34   作者:jiangxiaoju  
泛型允許程序員在強(qiáng)類型程序設(shè)計(jì)語言中編寫代碼時(shí)使用一些以后才指定的類型,在實(shí)例化時(shí)作為參數(shù)指明這些類型,本文通過例子給大家介紹下如何使用泛型,對Go1.18泛型相關(guān)知識感興趣的朋友一起看看吧

go泛型使用的官方說明:https://go.dev/doc/tutorial/generics

在使用之前先把go更新到1.18或者以上的版本:https://go.dev/doc/install

如果用過c++或者Java的話,那么對泛型這個(gè)概念應(yīng)該是不陌生的。(下面這段定義摘抄自百度百科)
泛型程序設(shè)計(jì)(generic programming)是程序設(shè)計(jì)語言的一種風(fēng)格或范式。泛型允許程序員在強(qiáng)類型程序設(shè)計(jì)語言中編寫代碼時(shí)使用一些以后才指定的類型,在實(shí)例化時(shí)作為參數(shù)指明這些類型。

我們可以用個(gè)簡單的例子來看看如何使用泛型。

在沒有泛型之前,如果我們要寫一個(gè)比較大小的函數(shù)的話,因?yàn)間o里面沒有函數(shù)重載的概念,所以我們必須對需要比較的類型都創(chuàng)建一個(gè)比較函數(shù),不過這樣的話,就會有大量邏輯重復(fù)的代碼,他們的區(qū)別只是變量的類型不同罷了。

package main

import "fmt"
func MaxInt(a, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}
func MaxFloat32(a, b float32) float32 {
func main() {
	var a, b int
	var c, d float32
	a = 1
	b = 2
	c = 1.1
	d = 1.4
	fmt.Println(MaxInt(a, b))
	fmt.Println(MaxFloat32(c, d))

那么泛型該如何使用呢?
go預(yù)留了一個(gè)泛型,名為comparable,這是官方定義的一個(gè)可比較的類型約束

// comparable is an interface that is implemented by all comparable types
// (booleans, numbers, strings, pointers, channels, arrays of comparable types,
// structs whose fields are all comparable types).
// The comparable interface may only be used as a type parameter constraint,
// not as the type of a variable.
//翻譯如下
//comparable是由所有可比較類型實(shí)現(xiàn)的接口
//(布爾、數(shù)字、字符串、指針、通道、類似類型的數(shù)組、,
//字段均為可比較類型的結(jié)構(gòu))。
//可比接口只能用作類型參數(shù)約束,
//不是作為變量的類型。
type comparable interface{ comparable }

我們可以來自己聲明一個(gè)類型約束。

type Number interface {
	int | int32 | int64 | float32
}

如上定義表示如果參數(shù)類型要為int、int32、int64float32這四個(gè)類型其中一個(gè)的適合,可以用Number替代。
所以我們可以把最初比較大小的代碼進(jìn)行修改、簡化一下。

package main

import "fmt"
type Number interface {
	int | int32 | int64 | float32
}
func MaxNumber[K Number](a K, b K) K {
	if a > b {
		return a
	} else {
		return b
	}
func main() {
	var a, b int
	var c, d float32
	a = 1
	b = 2
	c = 1.1
	d = 1.4
	fmt.Println(MaxNumber(a, b))
	fmt.Println(MaxNumber(c, d))

在函數(shù)名后面用在中括號中使用類型約束,這時(shí)候在函數(shù)里面K就表示Number這個(gè)類型約束,然后可以用在函數(shù)的參數(shù)列表、函數(shù)體、返回值中。

加入需要用到以int或者float32等基本類型為基礎(chǔ)的類型時(shí),例如type MyInt int,需要在類型名前面加上~

type Number interface {
 	~int   
}

如果不加的話,使用時(shí)會出現(xiàn)如下錯(cuò)誤提示

# generics-demo
.\main.go:23:23: MyInt does not implement Number (possibly missing ~ for int in constraint Number)

到此這篇關(guān)于Go1.18都出泛型了,不來試試看?的文章就介紹到這了,更多相關(guān)Go1.18泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言遍歷目錄的三種方法舉例

    Go語言遍歷目錄的三種方法舉例

    學(xué)習(xí)io之后,尤其是文件操作,我們就可以遍歷給定的目錄了,這篇文章主要給大家介紹了關(guān)于Go語言遍歷目錄的三種方法,分別是ioutil.ReadDir、filepath.Walk以及filepath.Glob,需要的朋友可以參考下
    2023-11-11
  • 深入理解Go中的項(xiàng)目代碼布局

    深入理解Go中的項(xiàng)目代碼布局

    Go?語言的創(chuàng)世項(xiàng)目其實(shí)就是?Go?語言項(xiàng)目自身,是全世界第一個(gè)?Go?語言項(xiàng)目,本文主要來和大家詳細(xì)介紹一下Go中的項(xiàng)目代碼布局,需要的可以了解下
    2023-11-11
  • Go Slice進(jìn)行參數(shù)傳遞如何實(shí)現(xiàn)詳解

    Go Slice進(jìn)行參數(shù)傳遞如何實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Go Slice進(jìn)行參數(shù)傳遞如何實(shí)現(xiàn)的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go工具鏈之代碼測試神器go?test詳解

    Go工具鏈之代碼測試神器go?test詳解

    這篇文章主要給大家介紹Go?工具鏈go?test,go?test?是?Go?工具鏈中的一個(gè)命令,用于編譯和運(yùn)行按照要求編寫的?Golang?測試代碼,并生成測試報(bào)告,感興趣的同學(xué)跟著小編一起來看看本文吧
    2023-07-07
  • 解析Golang中的鎖競爭問題

    解析Golang中的鎖競爭問題

    這篇文章主要介紹了golang中的鎖競爭問題,本文通過實(shí)例代碼給大家詳細(xì)講解,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Golang中Options模式的使用

    Golang中Options模式的使用

    選項(xiàng)模式是一種設(shè)計(jì)模式,允許通過提供選項(xiàng)自定義行為,Golang中的應(yīng)用廣泛,尤其是庫和框架設(shè)計(jì)中,本文深入探討Golang中選項(xiàng)模式的實(shí)現(xiàn),包括函數(shù)選項(xiàng)和結(jié)構(gòu)體選項(xiàng)兩種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Golang交叉編譯(跨平臺編譯)的使用

    Golang交叉編譯(跨平臺編譯)的使用

    本文主要介紹了Golang交叉編譯(跨平臺編譯)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go使用MongoDB的操作指南(增刪改查)

    Go使用MongoDB的操作指南(增刪改查)

    MongoDB 是一種高性能、開源、文檔型的 NoSQL 數(shù)據(jù)庫,廣泛應(yīng)用于 Web 應(yīng)用、大數(shù)據(jù)以及云計(jì)算領(lǐng)域,Go 語言則以其快速、開發(fā)效率高、代碼可維護(hù)性強(qiáng)著稱,本指南將詳細(xì)介紹如何在 Go 語言中使用 MongoDB 進(jìn)行數(shù)據(jù)庫操作,需要的朋友可以參考下
    2024-08-08
  • 詳解go-micro微服務(wù)consul配置及注冊中心

    詳解go-micro微服務(wù)consul配置及注冊中心

    這篇文章主要為大家介紹了go-micro微服務(wù)consul配置及注冊中心示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • GO語言原生實(shí)現(xiàn)文件上傳功能

    GO語言原生實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了GO語言原生實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

千阳县| 五家渠市| 广西| 沈丘县| 德惠市| 吴江市| 桐柏县| 班玛县| 麻城市| 磴口县| 东宁县| 海城市| 萨嘎县| 高陵县| 安西县| 营山县| 井陉县| 浮梁县| 刚察县| 沐川县| 梅州市| 温泉县| 壶关县| 曲麻莱县| 大连市| 鄂伦春自治旗| 建湖县| 英德市| 阜新市| 潞西市| 大悟县| 大埔区| 富平县| 抚远县| 登封市| 宿州市| 海丰县| 宜宾县| 土默特左旗| 金川县| 甘谷县|