Сегодня я работал над прототипом некоторого кода для выполнения следующих действий.

  1. Буферизация ряда объектов в памяти (порядок не важен)
  2. Обработайте буферизованные объекты одним пакетом, используя…
  3. startBatch() // установка
  4. для каждого объекта в буфере: сделать что-нибудь()
  5. stopBatch() // фиксация
  6. При закрытии кода любые оставшиеся объекты в буфере должны быть обработаны пакетно (некоторая потеря данных здесь допустима).

У меня ушло более 4 часов, и я до сих пор не закончил этот прототип. Я обнаружил, что попробовал несколько разных дизайнов.

Однажды у меня был момент «ага» вокруг каналов. Я неоднократно ловил себя на том, что гуглю поведение каналов — идет блокировка при чтении с закрытого канала или нет? Блокирует ли go чтение с пустого канала? Каков синтаксис для указания буферизованного канала? Выходит ли оператор break внутри оператора select из оператора select или его окружения for? Я не знаю эти вещи наизусть, поэтому мне требуется некоторое время, чтобы изучить их детали и правильно составить дизайн. Если бы вы попросили меня сделать это во время собеседования как «простой вопрос по программированию», я бы потерпел неудачу.

То, что вы считаете простым вопросом, может не быть таковым. В некоторых случаях ваш вопрос может быть проверкой знаний кандидата в языке. Учитывая, что большинство из нас считает, что компетентный программист может быстро выучить новый язык, вы должны спросить себя, правильно ли вы тестируете.