【发布时间】:2019-12-10 06:27:09
【问题描述】:
我正在尝试构建一个可以在 map[int]T 上实现的函数。 我很陌生,想知道这是否可以通过实现接口来完成。
invoices map[int]domain.Invoice
bookings map[int]domain.Booking
projects map[int]domain.Project
所有这些都有以下共同点:
type Invoice struct {
ID int
}
type Booking struct {
ID int
}
type Project struct {
ID int
}
我必须如何通过增加相应类型映射中最后一个项目的 ID 来实现返回所有发票、预订或项目的下一个 ID 的函数?
例如:
func (i *map[int]T) nextID() int {
return T.ID + 1
【问题讨论】:
-
这个想法有几个问题:首先,接口只指定方法,而不是字段;其次,即使你有一个可用的接口类型,你也必须专门使用
map[int]MyInterface;第三,你只能在你定义的类型上声明方法,你不能直接在map类型上声明方法。 -
谢谢@Adrian。有没有一种聪明的方法,我可以间接地在地图上声明一个方法?我认为这是一个类似于 C# 中的列表类型,您可以在其中添加和计数项目。
type InvoiceList struct { invoices map[int]domain.Invoice } func (il *InvoiceList) getNextID() int { ... }这还有一段路要走(没有双关语)? -
你可以声明一个类型
type MyMapType map[int]domain.Invoice,然后在MyMapType上声明方法。
标签: dictionary go interface