В чем преимущества и недостатки языка программирования Go?

Не так давно Google вышел с этим новым языком программирования, который, как говорили, был быстрым, как C, и интуитивно понятным и простым, как python. Я не буду судить об этих утверждениях, но попрошу вас:

Что вы думаете о преимуществах и недостатках Go ?
Можете ли вы рассказать нам о реальном использовании, которое вы дали этому языку программирования?

Ответ 1

Преимущества:

  • Go скомпилируется очень быстро.
  • Go поддерживает concurrency на уровне языка.
  • Функции - это объекты первого класса в Go.
  • Go имеет сбор мусора.
  • Строки и карты встроены в язык.

Недостатки:

  • Пакеты, распространяемые с помощью Go, очень полезны, но есть еще некоторые библиотеки, которые вы пропустите. В первую очередь набор инструментов пользовательского интерфейса.
  • В Go нет поддержки дженериков, хотя вокруг этого много обсуждений.

Другие примечания, которые могут быть преимуществами или недостатками:

  • Go компилируется в машинный код.
  • Go очень строго типизирован.
  • Go не является объектно ориентированным в традиционном смысле.

Ответ 2

Небольшой недостаток: действительно плохое имя GO для языка программирования, представьте себе поиск в Google для "Go Object" или "Go Maps" и наличие gazillion не связанных страниц.

EDIT: хотя вы можете использовать "golang" и легко находить то, что вам нужно.

Ответ 3

Я думаю, что ответ на этот вопрос устарел. За последние два года Голанг изменился. Пришло много исправлений ошибок и много новых сборок. Некоторые ответы больше не действительны:

  • Go - все еще экспериментальный язык, подлежащий изменению. (Я полагаю, это может быть преимуществом в зависимости от того, как вы на это смотрите. Для большинства это, вероятно, недостаток.) ​​- Я думаю, это изменилось.
  • Перейти на окна - больше не действует. Он работает как с окнами, так и с linux. (Я не знаю о MAC)

Дополнительные преимущества -

  • Он оснащен встроенным веб-сервером, который означает, что вам не нужен Apache или любой другой веб-сервер. Это прямое преимущество Go.
  • Голанг выполняет процедуры. В функциях Go есть возможность эффективно использовать поток. Он снова делит поток на субтитры, а для проектов с более высоким concurrency это будет лучший выбор.
  • Настройка и построение приложения в режиме go очень просто.
  • Go community - У них очень активное сообщество. Если у вас есть какие-либо проблемы, сначала выполните поиск в группе google google gongang, и если вы не найдете поиск или опубликуете его в https://code.google.com/p/go/issues. Они ответят максимум на 1 день.

Ответ 4

Я поместил свой текущий опыт в свой блог на http://blog.tideland.biz/category/golang. Насколько я вижу сейчас Go - очень продуктивное сочетание хорошо известных функций других языков. Он быстро компилируется, просто попробуйте сделать время для пакетов, вы будете удивлены. Он статически типизирован, но вы можете кодировать почти как на языке динамического типа. Таким образом, код небольшой и мощный. И, как уже говорилось, это обеспечивает своего рода поддержку concurrency почти как Erlang/OTP. Работа с goroutines и каналами проста, и вместе с новым пакетом netchan также можно использовать каналы через сеть.

Помимо языка Go, также важны библиотеки. Здесь Go уже идет - язык был анонсирован в ноябре и все еще бета-версии - с большим набором, главным образом сосредоточенным на сети, например. http или websocket-демонов, механизм шаблонов, шифрование, кодирование и т.д.

Ответ 5

Go - это прагматическая эволюция C, чтобы получить некоторые преимущества новых языков без потери скорости и худобы.

Часть его наследования проистекает из Pascal и приносит одну из функций, которые пользователи Delphi всегда любили в своей среде компиляции: невероятные скорости компиляции.

Go не вводит новшества в C так, как это делал С++, но по-питонски. Наиболее заметным влиянием является утиная типизация (см. Словарь Python). Это признает, что некоторые сильно типизированные языки создают столько проблем, сколько они решают, заставляя вас создавать сложные шаблоны для достижения того, что может решить простой интерфейс, используемый в качестве контракта на вызов. Безусловно, это особенность, которую я считаю самым смелым и наиболее перспективным. Я вижу, не просто упрощение в технике, но и упрощение реинжиниринга и развитие базы кода.

Наконец, parallelism, встроенный в язык, очень перспективен для тех приложений, которые будут нацелены первыми. Отсутствие привязок пользовательского интерфейса для любой ОС, первое использование, которое я вижу для Go, заключается в создании серверов и рамок приложений. В этом смысле я вижу много сходства по назначению с Java и уверенные Java-кодеры хотели бы что-то ускорить в компиляции и выполнении.

Ответ 7

Go построен из асинхронных задач - goroutines - с передачей сообщения между ними. Это чрезвычайно масштабируемо - это может быть сопоставлено с SMT/SMP и кластерами (можно представить себе кучу проблем с обработкой работы) и хорошо подходит для масштабирования бокового направления, в котором находится кремний.

Итак, меня беспокоит отслеживание состояния вне goroutines.

Если глобальных переменных не было, кроме базовых параллельных контейнеров, определенных языком, и они были явно указаны в коде, например. "global" является префиксом для таких переменных, а "volatile" находится в C, тогда это будет процедурный Erlang, который, как мне кажется, нужен миру.

Было бы интересно представить, как выглядят эти параллельные контейнеры, и как это можно защитить от redis/GFS2/rdbms в качестве параметра времени выполнения, а не для параметра времени кода.

Стоб говорит лучше: http://www.theregister.co.uk/2009/12/10/verity_stob/page3.html (прочитайте всю статью, это очень хорошо)