И столкнулся с проблемой. Буду очень благодарен за помощь в поиске решения.
                  
                  
                  Задача:
                  
                  
                  1) Получить из БД строки
                  
                  
                  2) Сгруппировать их по полю EventType, которое предварительно необходимо очистить от лишних пробелов
                  
                  
                  3) Обновить поле status в БД для каждой полученой строки
                  
                  
                  
                  
                  
                  Вносить изменения в функцию на сервере БД я не могу.
                  
                  
                  
                  
                  
                  У меня есть тип events
                  
                  
                  type events struct {
                  
                  
                   events map[string]*event
                  
                  
                  }
                  
                  
                  И для него есть такой метод. Имя постарался дать максимально отражающее то, что я хочу от этой функции:
                  
                  
                  Код на playground (запустить нельзя, но с компа читать удобнее): https://play.golang.org/p/T6apMlrULJs
                  
                  
                  
                  
                  
                  
                  
                  
                  func (e *events) getEventsFromSQLGroupedByEventType()(groupedEvents map[string][]*event){
                  
                  
                  
                  
                  
                      // 1) Получаем строки
                  
                  
                   rows, dbQueryErr := db.Query("...")
                  
                  
                   if dbQueryErr != nil {
                  
                  
                    return
                  
                  
                   }
                  
                  
                   defer rows.Close()
                  
                  
                  
                  
                  
                   for rows.Next() {
                  
                  
                    event := new(event)
                  
                  
                    rowsScanErr := rows.Scan(
                  
                  
                     &event.Id,
                  
                  
                     &event.EventType,
                  
                  
                    )
                  
                  
                  
                  
                  
                    if rowsScanErr != nil {
                  
                  
                     fmt.Println(rowsScanErr)
                  
                  
                     return
                  
                  
                    }
                  
                  
                  
                  
                  
                          // 2) Очищаем поле EventType от лишних пробелов
                  
                  
                    eventType := strings.TrimSpace(event.EventType.String)
                  
                  
                  
                  
                  
                    // 2) Группируем строки по полю EventType
                  
                  
                    groupedEvents[eventType] = append(groupedEvents[eventType], event)
                  
                  
                  
                  
                  
                    // 3) фиксация данных в БД для этой строки
                  
                  
                    ...
                  
                  
                   }
                  
                  
                   return
                  
                  
                  }
                  
                  
                  Первый вопрос: является ли побочным эффектом то, что я очищаю поля eventType от лишних пробелов? Или можно не придавать этому значение и не указывать это ни в названии функции, ни выносить в какой-то отдельный логичный метод?
                  
                  
                  
                  
                  
                  
                  
                  
                  У меня пока есть только один вариант решения:
                  
                  
                  По принципу single responsibility я разбить все это на три функции и поместить их как методы для  типа events
                  
                  
                  1) events.getEventsFromSQL()
                  
                  
                  2) events.groupEventsByEventType()
                  
                  
                  3) events.updateEventsStatusInDB()
                  
                  
                  По принципу open–closed я должен и метод groupEventsByEventType превратить в:
                  
                  
                  events.groupEventsBy("EventType")Но это влечет за собой кучу логики, которая пока не нужна. И следуя принципу YAGNI я это игнорирую.
                  
                  
                  
                  
                  
                  Дальше для удобства можно создать некий метод init где буду вызывать их по очереди.
                  
                  
                  func (e *events) init(){
                  
                  
                      e.events = events.getEventsFromSQL()
                  
                  
                      events.groupEventsByEventType()
                  
                  
                      events.updateEventsStatusInDB()
                  
                  
                  }
                  
                  
                  Но тут проблема в том, что в каждой из этих функций я должен пройтись по всем элементам мапы events. И мне кажется это излишним.
                  
                  
                
ппц полотно
Постарался компактно уложить все свои мысли, что бы проще было понять вопрос. Но вы правы, вышло все равно полотно D:
Для вас Го первый язык?
Второй, первый javascript
эт не язык :D
почитайте стива макконела - совершенный код
Я понимаю что это не ответ на вопрос, но может вам с джавы начать?
Ну, эту тему можно долго обсуждать) В целом мой вопрос даже не к языку относится, а к организации кода
ну типа JAVAscript пройден, осталось JAVA изучить
Я сейчас Чистый Код Роберта Мартина читаю
а потом изучить то на чем написана жава
Если вы эти язык рядом ставите, то точно с джавы.
я их ставлю рядом?
а потом изучить то на чем написано то на чем написана жава?
Отложите Чистый код и не заморачивайтесь. Вернётесь к этой книге через несколько лет когда наберетесь опыта. Все вопросы отпадут
судя по тому что я тоже так считаю, пришло то время когда пора уже советовать не порядок изучения технологий, а советовать порядок прочтения книг
google.com:80 http://google.com http://www.google.com https://google.com https://www.google.com
А сейчас то что делать?)
Обсуждают сегодня