最佳答案
我遇到了这个问题,对我来说有点奇怪:
package coreinterfaces
type FilterInterface interface {
Filter(s *string) bool
}
type FieldFilter struct {
Key string
Val string
}
func (ff *FieldFilter) Filter(s *string) bool {
// Some code
}
type FilterMapInterface interface {
AddFilter(f *FilterInterface) uuid.UUID
RemoveFilter(i uuid.UUID)
GetFilterByID(i uuid.UUID) *FilterInterface
}
type FilterMap struct {
mutex sync.Mutex
Filters map[uuid.UUID]FilterInterface
}
func (fp *FilterMap) AddFilter(f *FilterInterface) uuid.UUID {
// Some code
}
func (fp *FilterMap) RemoveFilter(i uuid.UUID) {
// Some code
}
func (fp *FilterMap) GetFilterByID(i uuid.UUID) *FilterInterface {
// Some code
}
在其他软件包中,我有以下代码:
func DoFilter() {
fieldfilter := &coreinterfaces.FieldFilter{Key: "app", Val: "152511"}
filtermap := &coreinterfaces.FilterMap{}
_ = filtermap.AddFilter(fieldfilter) // <--- Exception is raised here
}
运行时不会接受提到的行,因为
”不能使用 FieldFilter (type * coreinterface. FieldFilter)作为类型 * coreinterface. FilterInterface 参数为 field.AddFilter: * 核心接口。 FilterInterface 是指向接口的指针,而不是接口”
不过,在将代码更改为:
func DoBid() error {
bs := string(b)
var ifilterfield coreinterfaces.FilterInterface
fieldfilter := &coreinterfaces.FieldFilter{Key: "app", Val: "152511"}
ifilterfield = fieldfilter
filtermap := &coreinterfaces.FilterMap{}
_ = filtermap.AddFilter(&ifilterfield)
}
一切正常,当调试应用程序时,它似乎真的包括
我对这个话题有点困惑。当查看其他博客文章和堆栈溢出线程讨论完全相同的问题(例如 -这个,或 引发此异常的第一个代码片段应该可以工作,因为 fieldfilter 和 fieldmap 都被初始化为指向接口的指针,而不是接口的值。我还不能理解这里实际发生了什么,为了不声明 FieldInterface 并为该接口分配实现,我需要对其进行更改。一定有什么优雅的方法可以做到这一点。