не надо клиента грузить тоннами JSкатегорически не согласен. Клиентов много а сервер один. Вычислительная мощность современных клиентов зачастую больше мощности сервера. Поэтому считаю, что на клиента нужно перекладывать столько работы сколько только возможно.
Думал в структуре Error реализовать интерфейс error и передавать уже непосредственно через error ошибочный ответ.Совершенно верно.
func(e Error) Error() string{
return e.Message
}
type Error struct {
Message string `json:"message"`
Description string `json:"description"`
Error string `json:"error"`
error
}
import (
"net/http"
"net/http/cookiejar" //из этого пакета
)
...
jar, err := cookiejar.New(options)
if err == nil {
coocies := []http.Coocie{{Name: "token", Value: token}} //здесь собрать
jar.SetCookies(url, coocies) //здесь привязать к Url
}
client := http.DefaultClient //как вложить токен в куки при отправке запроса?
client.Jar = jar //здесь выдать клиенту
...
type db interface { //Объявляется контракт о том что тип db должен уметь SelectUser()
SelectUser() ([]*User, error)
}
type Model struct { //Структура Model включает как поле тип db с наследованием методов и полей
model.SelectUser()
db
}
func New(db db) *Model { //Делаем из экземпляра db экземпляр Model для расширения набора методов
return &Model{
db: db,
}
}
func (m *Model) User() ([]*User, error) { //Объявления метода для типа Model
return m.SelectUser()
}
m := model.New(db) //Делаем экземпляр Model
func (p *myDb) SelectUser()([]*model.User, error) { //Объявляем метод для типа myDb
user := make([]*model.User, 0) //Аллокация массива ссылок на экземпляры model.User
if err := p.sqlSelectPeople.Select(&user); //sql запрос к базе предоставляет созданный массив для выборки
err != nil {
return nil, err
}
return user, nil
type FooBar struct {
Table map[string]*Relation // здесь нужно Table вместо table чтобы имя/поле можно было импортировать
}