Как растолковать конструкцию на языке GO?

Пытаюсь научиться читать программы на GO, и вот не могу расталковать такой код:

type db interface {
	SelectUser() ([]*User, error)
}

type Model struct {
	db
}

func New(db db) *Model {
	return &Model{
		db: db,
	}
}

func (m *Model) User() ([]*User, error) {
    return m.SelectUser()
}

m := model.New(db)

func (p *myDb) SelectUser()([]*model.User, error)  {

   user := make([]*model.User, 0)
	
   if err := p.sqlSelectPeople.Select(&user);
   err != nil {
    		return nil, err
   }

return user, nil


помогите прочитать правильно.
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы