1 回答

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊
您無法在當(dāng)前的 Go 版本 1.17 中執(zhí)行此操作。不幸的是,沒有別的可說的了。
在泛型將被添加到語言中之后,可能在Go 1.18(2022年初)中,根據(jù)當(dāng)前接受的提案,這種參數(shù)化類型的語法將是:
type SafeSet[T comparable] struct {
Values map[T]bool
}
特別:
類型約束位于類型名稱之后T
如果要用作映射鍵,則必須使用內(nèi)置約束 ,因為映射鍵必須具有可比性,即支持運算符。Tcomparable==
然后,您必須使用實際類型參數(shù)實例化類型:
例:
若要使用泛型類型,必須提供類型參數(shù)。這稱為實例化。像往常一樣,類型參數(shù)顯示在方括號中。當(dāng)我們通過為類型參數(shù)提供類型參數(shù)來實例化類型時,我們將生成一個類型,其中類型定義中類型參數(shù)的每次使用都將替換為相應(yīng)的類型參數(shù)。
s0 := SafeSet[net.Conn]{Values: make(map[net.Conn]bool)}
s1 := SafeSet[string]{Values: make(map[string]bool)}
s2 := SafeSet[int]{Values: make(map[int]bool)}
由于實例化文本看起來有點冗長,因此您可以使用泛型構(gòu)造函數(shù) func:SafeSet
func NewSafeSet[T comparable]() SafeSet[T] {
return SafeSet[T]{Values: make(map[T]bool)}
}
顯然,語法是相同的,除了在這種情況下,您使用arg類型顯式實例化函數(shù):
s3 := NewSafeSet[uint64]()
s3.Values[200] = true
戈蒂普 游樂場: https://gotipplay.golang.org/p/Qyd6zTLdkRn
- 1 回答
- 0 關(guān)注
- 90 瀏覽
添加回答
舉報