泛型:嵌入在介面中的約束和結構
php小編小新為您帶來關於泛型的介紹。泛型是一種嵌入在介面中的約束和結構,它可以讓我們在編寫程式碼時更加靈活和有效率。透過使用泛型,我們可以在編譯時發現並解決類型錯誤,提高程式碼的可讀性和可維護性。泛型還可以幫助我們設計更通用的資料結構和演算法,提升程式碼的重用性。在這篇文章中,我們將深入探討泛型的概念、用法和實際應用,幫助您更能理解和運用泛型程式設計。
問題內容
以下程式碼無法編譯,並報告./main.go:35:7: test does not meet constraint (test missing in main.structwithname)
package main import "fmt" type Test struct { Name string } func (t Test) String() string { return fmt.Sprintf("Name: %v", t.Name) } type StructWithName struct { Name string } type Constraint interface { StructWithName // ~struct { // Name string // } String() string } func Print[T Constraint](x T) { //s := T{} fmt.Printf("Hello %v", x) } func main() { t := Test{ Name: "Test", } Print(t) }
但是,如果我註解掉 structwithname
並取消註解 ~struct 區塊,那麼它可以正常編譯。我無法理解兩者之間的語義差異。
我試圖做的是擁有一個可以以通用方式處理結構的通用方法;即 x := s{}
然後將其傳遞給外部庫。在這個例子中,它適用於terraform 提供程序,資源中的代碼非常相似,我對現有提供者中看到的重複量感到有點困擾;就我而言,資源非常相似,有些資源在預設結構之上只有一兩個字段)。我希望能夠編寫一組通用方法來完成所有相似的事情,並且只有其他地方的特殊性(廢話!)。
我還處於 go 之旅的早期階段,我無法理解編譯器錯誤。
解決方法
如果我理解正確的話,你真正想要的東西是不可能的。 go 泛型不支援存取結構體欄位子集。
- 查看相關內容:設定用作映射值的不同結構的欄位的通用函數
就所涉及的錯誤而言...
類型的名稱指定類型的標識,並且具有不同名稱(彼此不是別名)的兩個類型始終是不同的,因此test
和structwithname
是兩個不同的類型。它們唯一的共同點是它們的底層類型。
type constraint 介面{ structwithname }
介面是僅包含一種類型的類型集,即structwithname
,並且由於test
不是該類型集的成員,這意味著不可能使用test
類型來滿足該約束。
type struct { name string }
是一個無名型,任何無名型別的底層型別都是該型別本身,也就是struct 的底層型別{ name string }
is struct { name string }
。
約束中類型前面的波形符,即 ~t
,表示任何類型,其底層類型與 t
相同。或者,更準確地說,
~t 形式的項目的類型集合是基礎類型為 t 的所有類型的集合。
所以當你這樣做時
type Constraint interface { ~struct { Name string } }
那麼約束的類型集將包含任何以 struct { name string }
作為其基礎類型的類型。
以上是泛型:嵌入在介面中的約束和結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。

如何使用JavaScript或CSS控制瀏覽器打印設置中的頁首和頁尾在瀏覽器的打印設置中,有一個選項可以控制是否顯�...

關於inline-block元素錯位顯示的原因及解決方案在編寫網頁佈局時,我們常常會遇到一些看似奇怪的顯示問題。比...

如何實現分段器的45度曲線效果?在實現分段器的過程中,如何讓點擊左側按鈕時右側邊框變成45度曲線,而點�...

CSS自定義resize符號的方法與背景色統一在日常開發中,我們經常會遇到需要自定義用戶界面細節的情況,比如調...

實時比特幣美元價格 影響比特幣價格的因素 預測比特幣未來價格的指標 以下是 2018-2024 年比特幣價格的一些關鍵信息:
