1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        終于來了!go tip已經(jīng)可以使用泛型了

        共 1975字,需瀏覽 4分鐘

         ·

        2021-03-27 06:37

        我在二月份的文章利好!極大可能在go 1.17中就能嘗試泛型提到,雖然Go泛型會在Go 1.18中正式發(fā)布,但是因為各種原因,代碼已經(jīng)開始在master分支中實現(xiàn),所以極大可能你會在今年9月份發(fā)布的Go 1.17中就能嘗試使用Go泛型。

        那么,現(xiàn)在,可以去掉"可能"這兩個字了。在Go 1.17可以確定的說你能夠嘗試Go泛型編程了,盡管建議你還是在Go 1.18以及以后的版本才正式在產(chǎn)品中使用泛型。

        即使是現(xiàn)在,你也可以通過自己編譯master分支的方式,開始領略Go泛型的風采。

        安裝

        你可以通過下面的命令按照最新的master分支(Go項目中稱之為tip):

        go get golang.org/dl/gotip
        gotip download

        gotip命令會clone最新的master并進行編譯,編譯完之后,你就是可以使用gotip命令了。在需要go執(zhí)行程序的時候,只需要換成gotip即可。

        如果因為墻或者網(wǎng)絡的原因,你不能執(zhí)行上面的gotip download命令的話,你也可以直接git clone github上的go項目,執(zhí)行src下的make.bash文件,也可以編譯出go可執(zhí)行程序。

        甚至你也可以結合這兩種方式,相信如果有些許的下載困難不會阻礙到你。

        運行泛型例子

        比如下面一個加法的泛型例子,定義了一個Addable的約束(constraint),也就是可以執(zhí)行加法的類型約束。然后實現(xiàn)了一個泛型方法add, 參數(shù)有兩個(a和b),類型是滿足Addable約束的類型,然后返回相加的結果。

        package main

        import (
            "fmt"
        )

        type Addable interface {
         type int, int8, int16, int32, int64,
          uint, uint8, uint16, uint32, uint64, uintptr,
          float32, float64, complex64, complex128,
          string
        }

        func add[T Addable](a, b T able") T {
            return a + b
        }

        func main() {
            fmt.Println(add(1,2))

            // FIXME
            //fmt.Println(add("foo","bar"))
        }

        運行gotip build -gcflags=-G=3 main.go可以執(zhí)行這個文件,返回結果3。

        Go語言中兩個字符串可以相加嗎?

        "是的"! 字符串相加相當于concat,把兩個字符串連接起來,返回一個新的連接的字符串。按說,字符串也滿足Addable約束,但是你如果把倒數(shù)第二行的注釋去掉的話,這個程序是編譯不過的。

        原因在于Go的泛型還在開發(fā)之中,里面肯定還有大大小小的問題,所以即使Go 1.17發(fā)布了,必然還得存在一些不完善得地方,更何況現(xiàn)在里發(fā)布Go 1.17還早呢。

        更多得例子可以參照Yasuhiro Matsumoto的mattn/go-generics-example[1]項目,他提供十幾個泛型的例子,包括上面的add的例子。

        如果你覺得好玩,不妨按照本文的安裝方法,試試Go的泛型的功能。

        參考資料

        [1]

        mattn/go-generics-example: https://github.com/mattn/go-generics-example



        推薦閱讀


        福利

        我為大家整理了一份從入門到進階的Go學習資料禮包,包含學習建議:入門看什么,進階看什么。關注公眾號 「polarisxu」,回復 ebook 獲?。贿€可以回復「進群」,和數(shù)萬 Gopher 交流學習。

        瀏覽 53
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            又粗又孟又色又爽视频在线观看 | 少妇饥渴偷公乱22章 | 午夜成人免费网站 | haodri成人无码免费视频 | 仙女屋韩国主播大尺度tv | 国产精品 A网 | 色天堂影院在线观看 | 六月丁香激情综合色啪小说 | 日逼国产| 在线久草|