O
O
Oleg Voitenko2018-04-21 13:07:26
go
Oleg Voitenko, 2018-04-21 13:07:26

How to interpret a construction in the GO language?

I'm trying to learn how to read programs on GO, and now I can't interpret this code:

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

help me read it right.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
U
uvelichitel, 2018-04-21
@OliverV

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question