日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang 泛型_Golang 1.x版本泛型编程

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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版本泛型编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。