有沒有一種方法可以確保傳遞的值具有使用泛型的某些欄位?這是許多開發者在使用泛型時常常遇到的問題。在PHP中,我們可以透過類型約束和介面實作來實現這項功能。首先,我們可以使用類型約束來確保傳遞的值是某個類別的實例。然後,我們可以使用介面來定義某些欄位的規範,確保傳遞的值具有這些欄位。這樣,我們就可以在程式碼中使用泛型,並確保傳遞的值符合特定的欄位要求。透過這種方式,我們可以更好地利用泛型的優勢,並確保程式碼的可靠性和安全性。
問題內容
我試圖在 go 中定義一個通用函數,它接受具有某些欄位的值,例如 id int
。我嘗試了幾種方法,但似乎都不起作用。這是我嘗試過的範例。
package main import ( "fmt" ) func Print[T IDer](s T) { fmt.Print(s.ID) } func main() { Print(Person{3, "Test"}) } type IDer interface { ~struct{ ID int } } type Person struct { ID int Name string } type Store struct { ID int Domain string }
這是遊樂場連結:https://gotipplay.golang.org/p/2i4rsucwagf
在上面的範例中,我想保證傳遞給 print
函數的每個值都有一個屬性 id int
,該屬性也可以在函數中存取。有什麼方法可以在 go 中實現此目的,而無需在介面中定義方法(例如 getid() int
)?
解決方法
有什麼方法可以在 go 中實現此目的,而無需在介面中定義方法(例如 getid() int)?
不,您必須在介面中定義方法。
go 1.18 中的泛型實作不支援結構類型,儘管原始類型參數提案建議支援。要存取聯合中的公共字段,另請參閱 這個解釋。
儘管如此,我認為值得指出一個很容易從您的示例中產生的誤解:近似值~t
(波形符類型)的含義意味著「基礎類型為t 的類型集。 p>
現在,當你寫:
~struct{ id int }
這意味著其基礎型別完全為 struct{ id int }
。無論如何,這不包括具有字段 id int
和其他內容的結構。例如。 type foo struct { id int; 的底層型別;名稱字串}
是struct { id int;命名字串}
,而不是struct{ id int }
,這樣無論如何都無法滿足限制。
目前時間參數實作沒有指定部分結構類型的語法。我記得提案在介面限制中加入欄位術語(以及型別術語和方法) ),上線了:
type IDer interface { ID int }
這將在不破壞波形符號 ~
的含義的情況下實現您想要執行的操作。但這不會包含在 go 1.18 中。
以上是有沒有一種方法可以確保傳遞的值具有使用泛型的某些欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

golang ...

Go語言中如何對比並處理三個結構體在Go語言編程中,有時需要對比兩個結構體的差異,並將這些差異應用到第�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。