В плане производительности Go превосходит Node, если погуглить, то можно наткнуться на некоторые бенчмарки по этому вопросу. Порог вхождения в Go быстрее, как мне кажется, даже несмотря на то, что с JS знаком почти каждый.
Так вот, есть ли какие нибудь аргументы в пользу Go вместо Node для веба?
Node.js по сути представляет собой набор библиотек с биндингом в JS, использующий V8 в качестве виртуальной машины. Причем это далеко не первая, но пожалуй самая успешная попытка привнести javascript на сервера.
Golang - компилируемый язык программирования со статической типизацией, ориентированный на высокопроизводительные приложения.
Является ли Golang заменой Node.js - нет. Это абсолютно разные технологии, которые не смогут заменить друг друга.
Помимо golang можно взять любой другой компилируемый язык программирования (например dlang, как наиболее приятный из альтернатив по моему личному мнению).
Конкретно можете сказать чем эти технологии так различны, что go не может заменить node.js??? (только и слышу от таких умников как вы, различные технологии, заменой нет, а почему никто сказать не может. Только один абстрактный кал)
@Boniface, все просто. Есть довольно большое количество задачь, которые на node.js банально быстрее реализовать. golang все же создавался несколько для других типов приложений. Да и JS знает на порядок больше людей, так что для бизнеса эта технология еще довольно долго останется основной для реализации разных чатиков и пуш-серверов. А для Go это лишь капля в море. Go больше подходит для написания распределенных систем, это то, чего вообще не может Node (ну как бы может в теории, но это будет ад).
Я согласен, что node.js не может заменить go, но вот сам go (мое мнение) может заменить node.js (я программирую на ноде уже 2 года). То есть еще раз повторюсь - node.js не может заменить go, а go может заменить node.js.
К стати, а что такое "распределенные веб приложения" и почему их нельзя писать на node.js? Если вы про колбеки то есть куча способов это решить, хотябы таже либа async.js, если вы о динамической типизации то тогда нужно сказать что и ruby, python, objective c и так далее не годятся для написания этих самых "распределенных приложений" :)
Да и еще, для ноды можно писать C\C++ расширения, то есть либы. Это может решить некоторые проблемы.
@Boniface Си может заменить и Go и Node.js, но время разработки будет на порядок выше. Надеюсь вы уловили суть. Вы не будете писать простенький push-сервер на go с точки зрения заказчика, так как с этим прекрасно справляется node.js и за довольно небольшой бюджет (js-ников много, очень много).
По поводу распределенных приложений - я уж точно колбэки не имел в виду, я больше имел ввиду более эффективную модель паралелизма в Go (в node.js из коробки даже потоков нету, все в одном делается). Вообще Go лучше уж с Erlang сравнивать, у них сходств явно больше чем c node.js.
Вы утверждаете, что время разработки на Go выше чем на node.js... очень странное заявление. Многие кто только выбирает язык и пробует Go не зная до этого node.js, говорят потом что порог вхождения в Go ниже. Я же считаю что эти языки одинаково легко освоить и писать на них.
Затем вы утверждаете что писать на node.js "распределенные приложения" (пожалуйста поясните что же это такое!) плохо потому что нет потоков... Это тоже мягко говоря странное заявление :)
Так же вы говорите что я не буду писать на Go простенький push сервер... Это вообще обсурдное заявление. Посмотрите пожалуйста как выглядит простой сервер на GO и Node.js.
Вот сервер на Go:
package main
import (
"io"
"net/http"
"log"
)
// hello world, the web server
func HelloServer(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "hello, world!\n")
}
Это копипаст с сайта golang. Правда... охренеть какой сложный код.
Аналогично работа с postgresql, mongodb, redis и т.д так же проста как и на node.js только синтаксис разный.
Вобщем для заказчика вообще пофиг на чем писаться будет, сроки будут одни и теже. Так как реализовать fullREST сервер с бд и кешированием, сокетами и т.д элементарно как на node так и на go.
распределенные приложения - приложения части которых запускаются в разных процессах, на разных машинах и т.д. Там нужны механизмы взаимодействия всех этих частей отлаженные. Так же на Go удобно писать штуки типа DNS-серверов, различные сетевые сервисы и т.д.
Словом... мы видно о разном говорим. Мне Go импонирует для задачь где крайне удобно запилить пул из 1000 потоков и путь оно работает. А Node.js... если честно - я меня на нем завязана только сборка фронтэнда и все.
Заменой - нет.Они разные.Но вот если иметь в виду именно переписывание сайта с Node на Go, то он подходит больше других.Их скорость почти одинакова(Их C обгоняет).Go не содержит callback hell и очень приятен в синтаксисе.Для веб он подходит лучше других языков.
На досуге гонял хеловорды Ноды и Гоу через ApacheBench, нода совсем незначительно отстает по показателю Requests per second. Так вот я просто задумался о написании приложений исключительно как rest сервисы, а фронт например на ангуляр делать, тут же получается и mobile ready тебе подготовлен. Го в этой перспективе кажется весьма привлекателен хотя бы за то что это красивый синтаксис. Просто не совсем понятно пока существование камней например с long pooling или c socket.io... в общем с современными реалтайм фичами
@theaidem, гонять хеловорды в бенчмарках дело бесполезное. На худо бедно сложном приложении go за счет параллелизма будет давать нехилый прирост производительности.
@DDanya, не только у шаблонизатора Go, много где такие теги используются, собственно именно по этому такие теги использует и AngularJS, ибо это уже своего рода стандартная форма вывода значений переменных.
Другое дело что:
- Обычно шаблонизаторы предоставляют возможность эскейпить часть шаблона, что бы предотвратить такие вот конфликты.
- Шаблонам angularjs не место в шаблонах go. Если у вас приложение на angular.js, то на go вы должны реализовать только rest api. Словом полностью разделить фронт и бэк на два разных проекта. Если же у вас angular.js используется для какой-то части фреймворка - так же можно задуматься зачем это делается.
Сергей Протько: а как сделать на Angular авторизацию и разделение прав без токена и ssl?По логину и паролю и чтобы постоянно не нужно было его вводить?