日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
go語言泛型表情包,GO表情包

GO語言(十五):泛型入門(下)-

在本節(jié)中,您將添加通用函數調用的修改版本,進行小的更改以簡化調用代碼。您將刪除在這種情況下不需要的類型參數。

創(chuàng)新互聯(lián)專注于六枝企業(yè)網站建設,響應式網站設計,成都商城網站開發(fā)。六枝網站建設公司,為六枝等地區(qū)提供建站服務。全流程定制網站開發(fā),專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

當 Go 編譯器可以推斷您要使用的類型時,您可以在調用代碼中省略類型參數。編譯器從函數參數的類型推斷類型參數。

請注意,這并不總是可能的。例如,如果您需要調用沒有參數的泛型函數,則需要在函數調用中包含類型參數。

在 main.go 中,在您已有的代碼下方,粘貼以下代碼。

在此代碼中:

(1)調用泛型函數,省略類型參數。

從包含 main.go 的目錄中的命令行,運行代碼。

接下來,您將通過將整數和浮點數的并集捕獲到您可以重用的類型約束(例如從其他代碼中)來進一步簡化函數。

正如您將在本節(jié)中看到的,約束接口也可以引用特定類型。

1、編寫代碼

在此代碼中:

b.在您已有的函數下方,粘貼以下通用 SumNumbers函數。

在此代碼中:

c.在 main.go 中,在您已有的代碼下方,粘貼以下代碼。

在此代碼中:

(1)調用SumNumbers打印每個map的總和。

與上一節(jié)一樣,在調用泛型函數時省略了類型參數(方括號中的類型名稱)。Go 編譯器可以從其他參數推斷類型參數。

從包含 main.go 的目錄中的命令行,運行代碼。

做得很好!您剛剛學習了 Go 中的泛型。

如何看待go語言泛型的最新設計?

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成為現實。Go 團隊實施了一個看起來比較穩(wěn)定的設計草案,并且正以源到源翻譯器原型的形式獲得關注。本文講述的是泛型的最新設計,以及如何自己嘗試泛型。

例子

FIFO Stack

假設你要創(chuàng)建一個先進先出堆棧。沒有泛型,你可能會這樣實現:

type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{

return?s[len(s)-1]

}

func?(s?*Stack)?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack)?Push(value?interface{})?{

*s?=?

append(*s,?value)

}

但是,這里存在一個問題:每當你 Peek 項時,都必須使用類型斷言將其從 interface{} 轉換為你需要的類型。如果你的堆棧是 *MyObject 的堆棧,則意味著很多 s.Peek().(*MyObject)這樣的代碼。這不僅讓人眼花繚亂,而且還可能引發(fā)錯誤。比如忘記 * 怎么辦?或者如果您輸入錯誤的類型怎么辦?s.Push(MyObject{})` 可以順利編譯,而且你可能不會發(fā)現到自己的錯誤,直到它影響到你的整個服務為止。

通常,使用 interface{} 是相對危險的。使用更多受限制的類型總是更安全,因為可以在編譯時而不是運行時發(fā)現問題。

泛型通過允許類型具有類型參數來解決此問題:

type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{

return?s[len(s)-1]

}

func?(s?*Stack(T))?Pop()?{

*s?=?(*s)[:

len(*s)-1]

}

func?(s?*Stack(T))?Push(value?T)?{

*s?=?

append(*s,?value)

}

這會向 Stack 添加一個類型參數,從而完全不需要 interface{}?,F在,當你使用 Peek() 時,返回的值已經是原始類型,并且沒有機會返回錯誤的值類型。這種方式更安全,更容易使用。(譯注:就是看起來更丑陋,^-^)

此外,泛型代碼通常更易于編譯器優(yōu)化,從而獲得更好的性能(以二進制大小為代價)。如果我們對上面的非泛型代碼和泛型代碼進行基準測試,我們可以看到區(qū)別:

type?MyObject?struct?{

X?

int

}

var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek().(MyObject)

}

}

func?BenchmarkGo2(b?*testing.B)?{

for?i?:=?0;?i??b.N;?i++?{

var?s?Stack(MyObject)

s.Push(MyObject{})

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek()

}

}

結果:

BenchmarkGo1BenchmarkGo1-16?????12837528?????????87.0?ns/op???????48?B/op????????2?allocs/opBenchmarkGo2BenchmarkGo2-16?????28406479?????????41.9?ns/op???????24?B/op????????2?allocs/op

在這種情況下,我們分配更少的內存,同時泛型的速度是非泛型的兩倍。

合約(Contracts)

上面的堆棧示例適用于任何類型。但是,在許多情況下,你需要編寫僅適用于具有某些特征的類型的代碼。例如,你可能希望堆棧要求類型實現 String() 函數

go語言抓包工具有哪些官網

go語言抓包工具的網站:

1,sql2go網。

用于將 sql 語句轉換為 golang 的 struct. 使用 ddl 語句即可。

例如對于創(chuàng)建表的語句: show create table xxx. 將輸出的語句,直接粘貼進去就行。

2,toml2go網。

用于將編碼后的 toml 文本轉換問 golang 的 struct。

3,curl2go網。

用來將 curl 命令轉化為具體的 golang 代碼。

4,json2go網。

用于將 json 文本轉換為 struct。

5,mysql 轉 ES 工具網站。

模擬模板的工具,在支持泛型之前,可以考慮使用。7)查看某一個庫的依賴情況,類似于 go list 功能。

GO語言簡介:

Go(又稱?Golang)是?Google?的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)強類型、編譯型語言。

Go 語言語法與?C?相近,但功能上有:內存安全,GC(垃圾回收),結構形態(tài)及 CSP-style?并發(fā)計算。

當前有兩個Go編譯器分支,分別為官方編譯器gc和gccgo。官方編譯器在初期使用C寫成,后用Go重寫從而實現自舉。Gccgo是一個使用標準GCC作為后端的Go編譯器。

官方編譯器支持跨平臺編譯(但不支持CGO),允許將源代碼編譯為可在目標系統(tǒng)、架構上執(zhí)行的二進制文件。


當前文章:go語言泛型表情包,GO表情包
當前URL:http://www.dlmjj.cn/article/hojgjc.html