Просто выбросить это там, потому что принятый ответ, хотя и подробный, не помог мне устранить неполадки.

емые коллеги разработчики,

У меня есть эта проблема, которая кажется мне немного странной. Посмотрите на этот фрагмент кода:

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 (тип * coreinterfaces.FieldFilter) в качестве типа * coreinterfaces.FilterInterface в аргументе для fieldint.AddFilter: * coreinterfaces.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 и не назначал реализацию для этого интерфейса. Должен быть элегантный способ сделать это.

Ответы на вопрос(2)

Ваш ответ на вопрос