Извините, если этот вопрос немного базовый. Я пытаюсь использовать интерфейсы Golang, чтобы сделать реализацию CRUD более динамичной. я реализовал интерфейс следующегоКак вернуть интерфейс из метода, который он реализовал?
type Datastore interface {
AllQuery() ([]interface{}, error)
ReadQuery() ([]interface{}, error)
UpdateQuery() ([]interface{}, error)
CreateQuery() ([]interface{}, error)
DestroyQuery() ([]interface{}, error)//Im not sure if the return value implementation is correct
}
, который может использоваться с множеством моделей category Category
, tag Tag
.etc Он реализует методы, указывающие на структуры, которые представляют модели в приложении.
Вот упрощенный обработчик/контроллер FUNC UpdateHandler (с handler.context) Ошибка { р: = новый (models.Post) обратного обновления (р, с) }
Это функция реализующий интерфейс
func Update(data Datastore,c handler.context) error{
if err := c.Bind(data); err != nil {
log.Error(err)
}
d, err := data.UpdateQuery()
//stuff(err checking .etc)
return c.JSON(fasthttp.StatusOK, d)///the returned value is used here
}
Это метод я использую для запросов к базе данных
func (post Post) UpdateQuery() ([]interface{}, error){
//run query using the
return //I dont know how to structure the return statement
}
Как структурировать интерфейс выше и методы, которые он реализует, чтобы я мог вернуть результат запроса обратно к функции реализации. Пожалуйста, дайте мне знать, если мне нужно что-то добавить к вопросу или улучшить его, я постараюсь сделать это быстро. Спасибо!
Ваш интерфейс CRUD может быть лучше, если он предназначен похож на [this one] (https://godoc.org/github.com/sauerbraten/crudapi#Storage) –
Вы действительно должны попробовать и придумать пример _minimal_. И пожалуйста: избавьтесь от пустого интерфейса. Независимо от того, что вы пытаетесь сделать, это будет неправильно, если сделать это с помощью 'interface {}'. – Volker