我正在嘗試找到一個(gè)可以在以下代碼中使用的類(lèi)似接口:func SliceMax[T comparable](ts []T) (T, error) { if len(ts) == 0 { return 0, errors.New("cannot get max from empty slice") } m := ts[0] for _, e := range ts { if e > m { m = e } } return m, nil}但是 comparable 不起作用(它在 > 標(biāo)志上失?。?。這里有內(nèi)置界面還是我需要自己編寫(xiě)?
1 回答

慕桂英546537
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
預(yù)先聲明的類(lèi)型comparable
用于可與==
和比較!=
并且不包括大于或小于的事物。您可以從 go exp 存儲(chǔ)庫(kù)中使用constraints.Ordered
,盡管您還必須更改return 0, ...
為類(lèi)似的內(nèi)容var zero T; return zero, ...
,因?yàn)槔缱址强杀容^的但沒(méi)有 0。
它與您的問(wèn)題沒(méi)有直接關(guān)系,但作為一個(gè)小的代碼審查評(píng)論, type 的值[]T
是一個(gè)切片,而不是一個(gè)數(shù)組(數(shù)組具有固定大?。晕铱赡軙?huì)調(diào)用該函數(shù)SliceMax
并嘗試避免在當(dāng)前命名的參數(shù)的名稱(chēng)中包含類(lèi)型(即:切片或數(shù)組)typeArray
(它不是類(lèi)型數(shù)組——它既不是數(shù)組也不是它的元素類(lèi)型),并選擇一些通用的東西,ts
雖然我知道這不符合每個(gè)人的口味。
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)
0/150
提交
取消