Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Go очень быстро завоёвывает сообщество стартапов. Вот далеко не полный, и постоянно растущий список компаний...Только стартапов я там не увидел.
Достаточно скоро, многие из противников перейдут на Go просто следуя трендам рынка.Большие компании могут себе такое позволить.
хороший программист может выучить Go в течении 1-3 выходныхАга, синтаксис.
Большие компании могут себе такое позволить.
Если уж параллель с Java проводили…
Ага, синтаксис.
И вот прям вау эффекта, чтобы всё бросить и перейти на него, у меня не возникает =/
Я не уверен
вдруг
А так ведь — как мне шаблонизировать на go? Есть ли sass какой-нибудь процессор на go?
используя Go придется все равно заморочиться и с деплоем, и с devops.
Это как в Java уже 20 лет? Или в дотнете 13? Или в Питоне — не узнаю уж сколько.
вгенеривать документацию прям в бинарник
Я всего лишь попросил объяснить разницу.
По поводу дотнета — подключаете библиотеку и в интеллисенсе сразу видите контексно-зависимую документацию по тому что набираете. Вплоть до уровня аргументов у функций. Го, очевидно, так не умеет, в силу отсутствия тегов.
В Go это не так — я знаю, что мне достаточно написать одну строчку перед функцией и это тождественно «у тебя есть отличная документация к ней и она будет на godoc.org».
необходимость иметь специальную дев-среду для того, чтобы мочь посмотреть документацию, для меня звучит, как страшный сон
/*
*
*/
vs
/**
*
*/
в Go их аналогов нет вообще.
но он так же порождает стимул вообще не писать эти комментарии
Ну вам же объяснили и даже доказали. Чтобы стать полезной и нужной фичей, необходимо и достаточно попасть в go-мир. Все остальное априори от лукавого.
Ничего не хочу сказать против или за go, но divan0 типичный фанатик, со всеми вытекающими.
Но даже после беглого ознакомления становится понятно, что «не выходит из него серебрянная пуля»
И понравился он мне совсем не теми вещами, которые вы описали в статье.
где в качестве преимуществ указаны вещи, которые, как я знаю, гарантировано сделаны лучше в других платформах (будем честными, документация и деплой — это не про язык),
Я не понимаю, как наличие потенциальных, но не обязательных возможностей может порождать стимул не писать комментарии.
простой привычке однострочного коммента перед функцией
они наизусть знают «Code complete»
Вы правда пишите комментарий к функции isEmpty() «это функция проверяет что все поля объекты пусты», а к функции toString() «это функция переводит внутреннее представления объекта в строку»?
Скажите честно вы хотя бы пролистывали «Чистый код»?
который я вижу и видел, не подходит под это, поэтому комментарии — особенно с учетом наличия докогенератора по ним — всё остаются хорошей практикой
Ничего не скажешь, невероятно сложный синтаксис, несколько лет надо учить.
Можете ли как-нибудь доказать этот тезис?
Если вы намекаете на Javadoc и Pythondoc, то а) их нужно ставить отдельно, б) для них нужно учить/запоминать специальный синтаксис.
а) их нужно ставить отдельно
б) для них нужно учить/запоминать специальный синтаксис
удобно агрегируют документацию всех публичных проектов на Java
проектов, которые следуют этим правилам, гораздо меньше, чем тех, которые не следуют
А вообще ерунда это всё. В моём последнем проекте скрипт деплоя состоял из пары десятков строк на баше. Релиз выкатывается запуском ./release.sh на моей машине. Времени настроить это всё — ну несколько часов от силы. Не те масштабы, чтобы предоставлять статический бинарник, как нечто прорывное.
кроме экономии памяти (которая нынче дешёвая)
Да память дешевая, постоянная еще дешевле.
Ну можно, конечно, писать все на Haskell, заодно занимаясь изобретением драйвера для монги
Была статья про хаскель в продакте — habrahabr.ru/post/193722 — оттуда и взял.
Комьюнити у go больше, чем у хаскеля уже в несколько раз.
Это просто само за себя говорит
но вот вопросов по хаскелю более чем в два раза больше возникло
Индекс TIOBE — абсолютно нерепрезентативен для go.
И я позволю себе сделать допущение, что более-менее популярный opensource проект будет иметь хотя бы зеркало на гитхабе.
Если у вас есть большая площадка для opensource проектов чем github, то я с радостью посмотрю на цифры, которые она даст.
У go там реальные проекты, которые используются тысячами людей. У haskell — библиотеки.
Ну да. Это может свидетельствовать как о том, что язык более сложный, так и о том, что изучающих его больше.
Ну с той же убедительностью — количество звёздочек на гитхабе абсолютно нерепрезентативны для %langname%.
Да и свет клином не сошёлся на этом вашем гитхабе. Я вот, например, битбакет предпочитаю.
Я ещё могу поверить в то, что программисты на го пишут больше полезного софта, а на хаскеле — факториалов и учебников по монадам.
«Превосходя посредственность» («Beating the averages» — ориг).
If you do everything the way the average startup does it, you should expect average performance. The problem here is, average performance means that you'll go out of business.
А как сейчас модно деплоить go приложения? Есть какие-нибудь best practices?
как хранить и распространять, в случае веб-приложения, js/css/картинки, как минифицировать ассеты и прочее
Вы пайплайн ассетов в бинарник засунете?
почему его то с clojurescript сравнивают, то с веб фреймворками.
/var/www/passports$ du -h --max-depth=1 .
351M ./passports
366M .
> # Размер подготовленных данных
[host]/var/www/passports$ time ./passports_check 0000000000
1
> # плохой паспорт
./passports_check 0000000000 0,00s user 0,00s system 75% cpu 0,004 total
[host]/var/www/passports$ time ./passports_check 0000000005
0
> # хороший паспорт
./passports_check 0000000005 0,00s user 0,00s system 76% cpu 0,004 total
PS: серебряная пуля не в языке, а в алгоритмах и структурах данных.
1. Прост в написании
2. Прост в понимании
3. Прост для деплоя
4. Готов к продакшену
а мы же именно в его контексте Go рассматриваем, да? вроде бы кроме него этот язык пока нигде особо не отличился
Как я понял, суть аргумента в количестве библиотек.
кстати, в Go ведь веб-фреймворки умеют делать hot swap во время разработки
С другой, а много вы тратите времени на деплой?.. час-полтора… Я думаю, можно пережить.
Там выше ещё упоминали преимущество документации Go. Не знаю, насколько вы знакомы с экосистемой Python, но найти незадокументированные проекты довольно сложно.
Как я понял, суть аргумента в количестве библиотек.
Неверно поняли.
Да всё можно пережить. Но рынок движется другими силами.
Я очень рад за Python, что в третьей версии в нем достаточно неплохо обстоят дела с документацией.
Преимущество Go в сочетании тех или иных решений, которые именно в этом сочетании позволяют решать широкий круг актуальных для нашего конкретного времени, наших конкретных реалий и экосистем, задач, реальными не-сверх-идеальными программистами, и делать это быстро и качественно с минимальными затратами.
Просто вы в статье доказываете (ок, не вы, а изначальный автор, но вы ведь его в этом поддерживаете?), что Go превосходит посредственность (т.е. все эти другие, «обычные» языки и платформы), но тут же в комментариях говорите про плюрализм технологий.
db_session.Query(`SELECT user_id, password FROM users WHERE login = ? LIMIT 1`,
r.Form["login"][0]).Consistency(gocql.One).Scan(&user_id, &password);
db_session.Query(
"SELECT user_id, password FROM users WHERE login = ? LIMIT 1",
r.Form["login"][0]
)
.Consistency(gocql.One)
.Scan(&user_id, &password);
Устанавливают Nginx/HAProxy перед приложением, потому что Unicorn или Gunicorn не готов принимать прямой траффик из интернета.
Поднимают от 5 до 10 medium-инстасов на EC2
Пишут сложный pipeline для деплоя в cap или fab.
Как насчет вебсокетов? О, это будет отдельное приложение на Node, с таким же сложным pipeline для деплоя.
(tera-admin)ernado@nexus:/src/wrk$ ./wrk http://127.0.0.1:12602/b/0 -c 200
Running 10s test @ http://127.0.0.1:12602/b/0
2 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.20ms 1.17ms 17.55ms 89.80%
Req/Sec 71.28k 12.70k 101.56k 75.63%
1342963 requests in 10.00s, 152.86MB read
Requests/sec: 134304.13
Transfer/sec: 15.29MB
(tera-admin)ernado@nexus:/src/wrk$ ./wrk http://127.0.0.1:16888/b/1 -c 200
Running 10s test @ http://127.0.0.1:16888/b/1
2 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.04ms 6.64ms 218.84ms 97.12%
Req/Sec 8.46k 2.05k 14.36k 70.77%
162267 requests in 10.00s, 27.85MB read
Requests/sec: 16225.89
Transfer/sec: 2.79MB
За невозможность сделать переход на новую строку нужно расстрелять.
db_session.
Query(
"SELECT user_id, password FROM users WHERE login = ? LIMIT 1",
r.Form["login"][0]
).
Consistency(gocql.One).
Scan(&user_id, &password)
Consistency(gocql.One)то как я могу понять что это вызов из предыдущего результата? Больше похоже на вызов какой-то отдельной функции с параметром.
Кроме того, он весьма слабо подходит для написания высокопроизводительных систем требовательных ко времени отклика, не только из-за его относительной высокоуровневости, но, в основном, из-за GC останавливающего мир.На reddit'е недавно проскакивал benchmark относящийся как раз к этому случаю. A также как Go работает на «слегка на другом железе» упомянутом mva выше в комментариях.
Почему Go превосходит посредственность