簡體   English   中英

golang中的Collections

[英]Collections in golang

我使用 golang 作為我的服務器語言(因為我喜歡學習新語言)。 與 Python 或 Javascript 相比,我喜歡 go 是強類型的這一事實。

我正在尋找一種設計模式,允許我為自定義對象創建 collections。 在 Java、C# 或 C++ 中,我會使用 Z56B97998B338B9377FF5A928EE。 在 C 中,我會破解預處理器。 在 golang 中,我無法提出解決方案。

我總是可以使用 interface{},但這樣我就會失去強類型的優勢。 (你好 python/node.js 運行時錯誤!)

目前我只是為我需要的每種新類型復制粘貼我的 collections,但我發現自己在努力維護代碼庫,因為現在每個集合有大約 10 個副本。 所以我正在尋找更好的設計模式。 (此外,我的每一盎司都在告訴我這是一個壞主意)

我不是在尋找關於“沒有 generics 正在運行”的咆哮。 我正在尋找遇到並圍繞此類問題進行設計的實際經驗豐富的 golang 開發人員。

不幸的是,如果像切片/地圖這樣的標准 go 數據類型沒有您目前需要的功能,那么可以做的事情不多。

將 generics 添加到 go 會使實現 collections 更容易的原因是什么。 至於現在,有工具的草稿和第二個版本。 您可以在此處找到更多信息。

https://github.com/ReactiveGo/jig是一個工具,它可以通過生成您需要的 collections 讓您的生活更輕松。

Now that go supports generics, I took a shot at porting my old generics-base java collection framework to go (significantly gopherizing it in the process). 該框架定義了一組不錯的簡單接口,支持的集合類型包括:

  • Queues[T any](以允許隊列項目快照的方式包裝通道)
  • 堆棧[T任何]
  • Sets[T any](項目是有序且唯一的)
  • Lists[T any](在公共集合接口后面包裝數組/切片)
  • Catalogs[K any, V any](以保留映射值順序的方式包裝映射)

框架中還包括一些對集合類型進行操作的代理:

  • 迭代器[T any]
  • 格式化程序(將任何集合格式化為以后可以解析的規范字符串)
  • 解析器(將集合的規范字符串格式解析為該集合的實例)

你可以在這里查看: https://github.com/craterdog/go-frameworks/wiki/Collections

請注意,此框架仍處於實驗性 state 但歡迎任何反饋和建議。

您可以嘗試檢查這個項目: https://github.com/jose78/go-collection 這個項目提供了很多方法來輕松使用 collections。

問候,JC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM