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

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

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

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

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

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

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

在沒有泛型之前,如果我們要寫一個比較大小的函數(shù)的話,因為go里面沒有函數(shù)重載的概念,所以我們必須對需要比較的類型都創(chuàng)建一個比較函數(shù),不過這樣的話,就會有大量邏輯重復的代碼,他們的區(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預留了一個泛型,名為comparable,這是官方定義的一個可比較的類型約束

// 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是由所有可比較類型實現(xiàn)的接口
//(布爾、數(shù)字、字符串、指針、通道、類似類型的數(shù)組、,
//字段均為可比較類型的結構)。
//可比接口只能用作類型參數(shù)約束,
//不是作為變量的類型。
type comparable interface{ comparable }

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

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

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

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ù)里面K就表示Number這個類型約束,然后可以用在函數(shù)的參數(shù)列表、函數(shù)體、返回值中。

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

type Number interface {
 	~int   
}

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

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

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

相關文章

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

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

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

    深入理解Go中的項目代碼布局

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

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

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

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

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

    解析Golang中的鎖競爭問題

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

    Golang中Options模式的使用

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

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

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

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

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

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

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

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

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

最新評論

高台县| 山西省| 湘潭市| 中西区| 万安县| 桃园县| 西丰县| 恩施市| 台北市| 斗六市| 体育| 利辛县| 尉氏县| 华坪县| 平顺县| 文化| 三原县| 维西| 东丽区| 江华| 贵阳市| 宝兴县| 巴马| 江津市| 绍兴县| 商河县| 富锦市| 兖州市| 尤溪县| 大姚县| 钟祥市| 格尔木市| 阳春市| 慈溪市| 大理市| 延吉市| 万盛区| 绥中县| 郑州市| 巴青县| 根河市|