2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
來自Go 1.18 發(fā)行說明:
Go 編譯器不支持訪問結(jié)構(gòu)字段 xf,其中 x 是類型參數(shù)類型,即使類型參數(shù)的類型集中的所有類型都有字段 f。我們可能會(huì)在 Go 1.19 中移除此限制。
例如,您可以向返回 DATE_START 字段的每個(gè)結(jié)構(gòu)添加一個(gè)DateStart() time.Time方法,然后如果您想使用泛型,則將該方法用作類型約束的一部分。
也就是說,您不需要針對(duì)此特定問題的泛型。即使沒有泛型,您也可以定義一個(gè)接口:
type SomeInterface interface {
DateStart() time.Time
}
然后排序:
items := []SomeInterface{
INVENTORY_TAG{...},
INVENTORY_TAG{...},
}
sort.Slice(items, func(i, j int) bool { return items[i].DateStart().Before(items[j].DateStart()) })

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
在這種情況下最好使用接口實(shí)現(xiàn),但如果你想嘗試泛型,你可以這樣做:
package main
type JOURNAL_TAG struct {
DATE_START time.Time
DATE_END time.Time
ENTRY_NUMBER uint
VALUE float64
}
type INVENTORY_TAG struct {
DATE_START time.Time
DATE_END time.Time
PRICE float64
QUANTITY float64
ACCOUNT_NAME string
}
type hasDateInterface interface {
DateStart() time.Time
}
func (j JOURNAL_TAG) DateStart(){
return j.DATE_START
}
func (i INVENTORY_TAG) DateStart(){
return i.DATE_START
}
func sort_by_time[t hasDateInterface](slice []t, is_ascending bool) {
sort.Slice(slice, func(i, j int) bool {
return slice[i].DATE_START.After(slice[j].DateStart()) == is_ascending
})
}
試過 https://go.dev/play/p/Xak4uzCNhE-
- 2 回答
- 0 關(guān)注
- 172 瀏覽
添加回答
舉報(bào)