У меня есть интерфейс TagService со структурной реализацией. Они находятся в двух разных пакетах из-за So C. Я хочу создать экземпляр реализации и добавить его в другой обработчик структуры, который имеет поле типа интерфейса.
Это происходит в основном пакете:
package main
...
ts := &postgres.TagService{DB: db}
var h http.Handler
h.TagService = ts
Однако при этой установке я получаю следующую ошибку в коде VS:
cannot use ts (variable of type *postgres.TagService) as *tagservice.TagService value in assignment
Структура обработчика :
type Handler struct {
TagService *tagservice.TagService
}
Интерфейс:
package tagservice
type Tag struct {
ID int64
Name string
Description string
}
type TagService interface {
CreateTag(tag *Tag) (*Tag, error)
GetTag(id int64) (*Tag, error)
GetAllTags() ([]*Tag, error)
UpdateTag(tag *Tag) (*Tag, error)
DeleteTag(id int64) error
}
И реализация (Опущено удовольствие c тел)
package postgres
type TagService struct {
DB *sql.DB
}
func (s *TagService) CreateTag(tag *tagservice.Tag) (*tagservice.Tag, error) {
...
}
func (s *TagService) GetTag(id int64) (*tagservice.Tag, error) {
...
}
func (s *TagService) GetAllTags() ([]*tagservice.Tag, error) {
...
}
func (s *TagService) UpdateTag(tag *tagservice.Tag) (*tagservice.Tag, error) {
...
}
func (s *TagService) DeleteTag(id int64) error {
...
}
Что я делаю не так? Заранее спасибо