<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          終于來了!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分支的方式,開始領(lǐng)略Go泛型的風采。

          安裝

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

          go get golang.org/dl/gotip
          gotip download

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

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

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

          運行泛型例子

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

          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í)行這個文件,返回結(jié)果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學習資料禮包,包含學習建議:入門看什么,進階看什么。關(guān)注公眾號 「polarisxu」,回復 ebook 獲?。贿€可以回復「進群」,和數(shù)萬 Gopher 交流學習。

          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高清无码影音 | 色婷婷www | 日韩欧美网站 | 91碰碰| 欧美好爽 |