18

Этот язык уже несколько лет в поле видимости.

  • Но что на нем пишут?
  • И что можно написать?
  • Стоит ли его учить?
  • Или он скоро исчезнет?
Nick Volynkin
  • 34,094
dfhsfhgfj
  • 2,274

5 Answers5

27

Что на нём пишут?

И что можно написать?

Что угодно. На самом деле что угодно, но, в силу своих плюсов он очень популярен для разработки сервер-сайда (бэкенда).

Стоит ли его учить?

Вопрос риторический. С точки зрения покупаемости, готовый спрос на него почти отсутствует, в силу молодости и нераскрученности. Так что смысл в нём есть:

  1. Для себя, своего стартапа
  2. Продавать готовый продукт
  3. Выполнить заказ, если заказчику подходят плюсы этого языка (придётся объяснять/убеждать)

Или он скоро исчезнет?

Как уже писали - исчезнуть он не может, т.к. OpenSource. Т.е. никто не отберёт у Вас написанное на нём, максимум будет ухудшаться развитие/поддержка, во что слабо верится, т.к у языка очень существенные плюсы.

Плюсы или «почему я выбрал Go»

Производительность

По производительности для веб (готовые фреймворки) Go проигрывает только Java и С/С++ и наравне с node.js. При этом потребление ресурсов существенно ниже, чем у Java и производительность намного больше, чем у Python/Ruby.

Многопоточность

При этом имеет просто офигенную многопоточную модель по сравнению с ними. Пока это лучшее, что я встречал для многопточки/асинхрона. При этом он поддерживает и классические паттерны вроде мьютексов и колбэков.

Простота

Он очень прост в освоении. Мне кажется даже элементарен, особенно если есть основа из Python/JavaScript. Есть также довольно занятная модель наследования, которая, как мне кажется более прозрачна чем классическое ООП, но немного непривычна поначалу.

Надёжность

Язык этот компилируемый и статически типизированный. Что даёт выявление многих ошибок задолго до продакшена. К примеру такие ошибки в Python выявляются только непосредственным тестированием и, если тестов нет, то шансов положить систему очень много. Тут же это исключается на этапе компиляции.

Скорость компиляции

И, наконец, одна из главнейших фишек — не стоит бояться типизации и компиляции. В 145% случаев Вам не придётся объявлять тип переменой в коде — он задаётся автоматически при присвоении ей значения. Объявлять переменные заранее также не нужно.

Ну и компиляция — главный конёк. Время компиляции - это то, на что делается главный упор при разработке языка. Оно не отличается от времени запуска интерпретируемого языка. Т.е. система, написанная на go из нескомпилированных исходников запускается примерно с такой же скоростью как система аналогичной сложности, написанная на интерпретируемом языке.

Итого

Т.е. мы имеем плюсы из двух миров — скорость компиляции/запуска интерпретируемого и надёжность компилируемого языков. Плюc сверху производительность, мультипарадигменность (можно писать в функциональном стиле), простота и низкое ресурсопотребление.

Подходит ли это Вам - решать не мне. Мне — подходит, и я считаю его очень хорошим выбором для высоконагруженных сервисов (и не только).

avp
  • 103
qnub
  • 3,028
  • @qnub, хороший обзор.

    --

    Несколько серьезных вопросов:

    Как делаются большие программы (много файлов + свои библиотеки функций (или классов?) на Go)? Как происходит сборка при изменении одной строки кода?

    Как работать со "сторонним" кодом (например, С или С++)?

    Взаимодействие с ОС. Поддерживается ли posix и в каком объеме?

    Отладчик программы из нескольких процессов? Можно ли динамически подключаться отладчиком к уже работающим процессам?

    --

    И по мелочи:

    Вы серьезно считаете отсутствие необходимости объявлять тип переменной плюсом?

    Кстати, а вообще-то переменные в Go можно объявлять?

    – avp May 30 '13 at 07:57
  • 2
    Очень существенные вопросы (не для местного лимита), напрашивающиеся на посыл в документацию :)

    пакеты?

    http://j.mp/Zv4Vf2 про подробности перекомпиляции не знаю, но компиляция в принципе практически мгновенная…

    С/С++?

    http://j.mp/Zv4P7s

    POSIX?

    http://j.mp/Zv4Qbv

    дебаг?

    GDB - http://j.mp/Zv4OjC

    Плюс ли ненужность объявления переменной? Любое сокращение писанины не ухудшающее понимание исходников — плюс.

    И да, переменные можно объявлять.

    – qnub May 30 '13 at 08:40
  • @qnub, спасибо. Глянул краем глаза на introduction... из Ваших ссылок, интересно.

    Я правильно понял, что в результате программирования мы получаем загрузочный модуль?

    Можно ли его сделать статическим (независимым от .so (.dll в винде))?

    При переносе нестатического модуля на другую машину какие усилия по установке требуются?

    Правильно ли я понял, что попытаться работать со своими shared lib можно только через свой же Си (или я просто dlopen в Ваших ссылках не нашел)?

    В Go есть "portable окошки" (виджеты, скажем, уровня Tk) для X-Windows и винды?

    Реальная переносимость линукс-винда?

    – avp May 30 '13 at 09:27
  • 1
    Не уверен что моей компетенции уже достаточно для ответов на эти вопросы. Меня же он интересует в большей степени для сервер-сайда, а не для прикладных программ, хотя я знаю что на нём есть и приложения с GUI, по крайней мере использующие GTK. Существующие родные пакеты здесь http://golang.org/pkg/ подборка сторонних здесь http://j.mp/15l6YAU (есть GTK и Qt, а Tk не вижу, но может ещё где есть).

    Компилируется он в нативный код системы по-идее же. Тут пример вызова виндовых dll: http://j.mp/15l8DGE тут компиляция виндового экзешника под линём: http://j.mp/15l8OBW

    – qnub May 30 '13 at 11:23
  • @qnub, еще раз спасибо.

    И все-таки, у Вас есть опыт переноса Go программ между *nix и Windows и установки готового Вашего продукта на несколько машин?

    Я имею в виду машины, на которых не стоит среда разработки.

    --

    Если да - то каковы впечатления?

    – avp May 30 '13 at 11:47
  • 1
    К сожалению нет, такого опыта у меня нет. Я делаю сервис для Google App Engine, а там всё автоматизировано и что стоит на серверной стороне я даже не знаю :) – qnub May 30 '13 at 14:16
  • Многопоточность

    Пока это лучшее, что я встречал для многопточки/асинхрона

    А вот тут я бы привёл пример эрланга, вот там многопоточка так многопоточка.

    – savva Jun 15 '13 at 12:39
  • @Savva, @qnub Да, сообщение не очень-то информативное. Для точности ему не хватает списка того, что @qnub вообще многопоточного встречал. – alexlz Jun 15 '13 at 12:49
18

Но что на нем пишут?

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

И что можно написать?

Практически что угодно, но все таки упор делается на web приложения. По моему мнению, Go идеален для разработки под web, когда требуется максимальное быстродействие и надежность. К примеру, если вам надо быстренько накатать домашнюю страничку для "Васи Пупкина" Go явно не лучший выбор, пишите в PHP (Он кстати для этого изначально и предназначен Personal Home Page), а вот если необходим серьезный веб-сервис, где банальная опечатка в коде может обойтись вашему клиенту в XXX$ то тут уже имеет смысл присмотреться к Go

Стоит ли его учить?

Боюсь ответа на этот вопрос, вам никто, кроме вас, дать не сможет. Попробуйте его в деле, тогда сразу поймете подходит ли он вам, и для каких целей. Лично я влюбился в этот язык с первого взляда)

Или он скоро исчезнет?

Go не может исчезнуть, это opensource.

  • @Павел Вершинин, а размер загрузочного модуля не великоват?

    Я Go так и не решился начать пробовать, после того, как где-то увидел, что размер HelloWorld больше мегабайта.

    И еще, с чем по занимаемой памяти можнно сравнить серьезную программу (я имею в виду программу, которая манипулирует "сырыми" мегабайтами данных в разных структурах (массивы, деревья и т.п.) в RAM) с C/C++ или Python/Java?

    – avp Apr 15 '13 at 07:25
  • 2
    @avp Основа Go пакеты (Packages), для написания простого HelloWorld вы как минимум импортируете (подключите к проекту) пакет fmt, а fmt, в свою очередь, импортирует еще некоторое количество пакетов, те еще итд. Отсюда, а не из-за загрузочного модуля, сравнительно большой вес такой простой программы. В дальнейшем вес нарастает очень незначительно. По второму вопросу ответить не могу, поскольку сам никаких сравнений не делал, полистайте хабр http://habrahabr.ru/hub/go/ там есть немного по этой теме. – Павел Вершинин Apr 15 '13 at 21:14
  • Абсолютно любой веб сервис можно,а поисковик можно?короче сервис с большими нагрузками.Вот,кстати, http://tour.golang.org/#1 онлайн тур изучение языка – vanekk1 Apr 16 '13 at 10:18
  • Сервис с большими нагрузками нужно. – qnub May 30 '13 at 04:47
  • 1

    Go не может исчезнуть, это opensource.

    Не люблю я эти фразы. Вот не будет никого коммьюнити, книг, курсов и тулзов - считай исчез. И что, что код на задворках гитхаба валяется

    – kandi Jun 16 '14 at 17:48
2

Думаю к описанным выше плюсам языка добавлять ничего. Понятно что человек придумавший язык Си, а теперь работающий в гугл и придумавший GO учёл всё и сделал действительно великолепный и простой язык. Учить стоит!

Учить не стоит если ты всю жизнь планируешь писать домашние странички на php, если ничего сложнее инет магазина не планируешь сделать. Просто выучить и никогда не использовать тоже не стоит...

bosom
  • 77
  • 4
    @bosom обратите внимание, вопрос задан больше года тому назад, вряд ли имеет смысл заниматься некромантией и воскрешать давно умерших (особенно учитывая, что тема уже исчерпана). К вашим услугам множество других, более свежих вопросов, а этот - уже достояние истории – DreamChild Jun 16 '14 at 16:48
1

Ещё на нём легко под Андроид пишутся программули и летают как ракеты!

Что ещё в нём хорошо, так это кроссплатформенность. Написал один раз и компилируешь под любую. Причём я на Винде сделал для Винды и для Линукса. Выгрузилась на Линукс и запустил без переделок...

Под Андроид все делает одна утилита gomobile. Причём и сразу может на смарт установить, если подключить шнурком.

VladD
  • 206,799
mistbow
  • 211
0

Вам стоит взглянуть на список компаний/сервисов так или иначе использующих Golang

Am6puk
  • 9
  • 1
    Постарайтесь писать более развернутые ответы. Поясните, на чем основано ваше утверждение? – Nicolas Chabanovsky Aug 20 '15 at 15:22