我開始使用 Go 泛型并且很難理解為什么這段代碼無法編譯:func f(string) {}func xyz[T string](p T) { f(p) // Error! Cannot use 'p' (type T) as the type string}在 function 中xyz,為什么不能假定 T 上存在類型約束,使得 T 是字符串類型?我知道我可以簡單地寫f(string(p)),但我仍然對問題的答案感興趣。
1 回答

瀟瀟雨雨
TA貢獻1833條經(jīng)驗 獲得超4個贊
這是因為assignability規(guī)則,在您的特定情況下,這是最后一條規(guī)則。
V 是類型參數(shù),T 不是命名類型,并且 V 的類型集中的每個類型的值都可以分配給 T。
Typestring
是命名類型,因此,即使 的T
類型集中的每個類型都可分配給string
,類型參數(shù)T
本身也不可分配給string
。
您可以將其與未命名類型進行比較。
func f([]string) {}
func xyz[T []string](p T) {
f(p) // no issue
}
- 1 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報
0/150
提交
取消