Go 的反射包可以啟用切片中的通用元素存在檢查嗎?
Nov 03, 2024 am 09:53 AM可以實作通用程式碼來判斷 Go 切片中是否存在元素嗎?
在 Go 中,判斷切片是否包含特定元素是一個共同操作。然而,對於每種新的切片類型,實作此邏輯似乎很乏味。
一種嘗試的解決方案涉及使用interface{} 切片,如程式碼片段所示:
1 2 3 4 5 6 7 8 |
|
但是,這種方法受到interface{}的性質以及每個新切片類型實現它的要求的阻礙。
幸運的是,Go的反射包提供了一個通用的解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
這個函數有兩個參數:切片和要尋找的元素。它使用反射來確定切片是切片還是數組,然後使用 ValueOf() 和 Index() 方法迭代其元素。
雖然這種通用方法很方便,但其代價是表現。基準測試顯示,它可能比非通用版本慢50-60 倍,如下所示:
1 2 3 4 5 6 7 8 |
|
基準測試結果:
- 通用: N=100000, 73.023214ms, 730.23214 ns/op
- 非泛型:N=100000, 1.315262ms, 13.15262 ns/op
以上是Go 的反射包可以啟用切片中的通用元素存在檢查嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)