Comments 27
Единственный неявный момент в том, что случайно назвав свой файл, например, my_program_test.go, можно не сразу понять, почему ничего не работает. А причина в том, что все тесты должны иметь шаблон названия *_test.go.
Очепятка, или момент настолько неявный?
Можно поподробнее, где ошибка?
my_program_test.go на первый взгляд подходит под шаблон *_test.go
Так почему назвав файл my_program_test.go можно не сразу понять, почему ничего не работает?
Go поддерживает параллелизм,
*Concurrency and Parallelism - категорически не стоит обобщать эти два понятия в голове. И при изучение языка. сразу расставить все по полочкам.
А вот вопрос, вы из тех кто по прежнему заставляет кандидатов писать код на бумажке?
Нет, мы пытаем кандидатов еще более изощренно - заставляем писать в Yandex.Code
А куда он делся, кстати? Пользовался им для проведения собеседований какое-то время.
thx. Google по "yandex code" выдаёт всё что угодно, но не ссылку выше. Шифруетесь :)
err, val := somefunc()
if err != nil {
log.Logger.Error(err)
}
, когда стандартной практикой является:if val, err := somefunc(); err != nil {
log.Logger.Error(err)
}
Это не «шум», а иной подход к обработке ошибок: ошибка в Go — не состояние, а значение. С которым надо работать точно так же, как с другими значениями. Да, приходится писать чуть больше кода. Но качество кода — это не то, насколько быстро он пишется, а то, насколько хорошо он читается. И подход, принятый в Go, читается очень хорошо — часто лучше, чем более распространённые try-catch.Go — функциональный язык, он не предоставляет стандартных средств ООП как таковых.Нет, Go — не функциональный, а императивный компонентно-ориентированный язык. Обеспечивающий возможности, эквивалентные «страуструповскому» варианту ООП, на основе композиции — без присущих наследованию недостатков.
Горутины. В Python уже давно есть асинхронный код и корутины, так что особых проблем с горутинами не возниклоНет, go-процедуры — это не сопрограммы. В первых версиях компилятора — да, go-процедуры реализовывались через кооперативную многозадачность. Но в последних версиях компилятора добавилась и вытесняющая многозадачность, так что сейчас go-процедуры ближе к полноценной многопоточности, чем к сопрограммам.
Только в приведенной вами стандартной практике, скоуп val будет ограничен. Эта практика стандартна для функций, возвращающих только error.
И нет — вызов функции в инициализаторе if является стандартной практикой даже если функция возвращает не только error. Другой же стандартной практикой является возврат error исключительно последним значением кортежа — и никак иначе.
> Стоит отметить, что цикл событий встроен в Go
Что вы имеете в виду?
За 11 лет миддл понятно.
а кем надо стать за 11 лет?
а точно ли все 11 лет имеют одинаковый вес?
а смена стека не обесценивает полученный ранее опыт?
а чьи "лычки" мега архитектора в конмпании делающей лединги и мидла в топовой IT больше?
Ну и главный вопрос - а точно ли имеет смысл гнаться за лычками? Некоторым дейтсивтельно комфортно делать то что они делают. И им не нужен ни доп головняк, ни дополнительная отвественность, более высокий темп гонки. Или с такими ребятами тоже "поняяятно"?
Простите пожалуйста, если излишне эмоционально. Очень не нравится, когда обесценивают чей-то труд
что два разных программиста на С++ могут просто не понять чужой код, потому что пишут на разных С++.
Ну это не правда, это всё равно что сказать, что два программиста на Java могут не понять код друг друга потому что один из них стал использовать Stream api
ООП. Go — функциональный язык
Наверно Вы хотели сказать "Процедурный", т.к. он совершенно точно не функциональный.
А вот что касается ООП в Go, это отдельная тема для обсуждения, т.к. фундаментальные принципы объектно-ориентированного подхода успешно применяются в Gо, хотя выражаются несколько менее привычным способом.
Go после Python: как я учу новый язык