Этот язык уже несколько лет в поле видимости.
- Но что на нем пишут?
- И что можно написать?
- Стоит ли его учить?
- Или он скоро исчезнет?
Этот язык уже несколько лет в поле видимости.
Что на нём пишут?
И что можно написать?
Что угодно. На самом деле что угодно, но, в силу своих плюсов он очень популярен для разработки сервер-сайда (бэкенда).
Стоит ли его учить?
Вопрос риторический. С точки зрения покупаемости, готовый спрос на него почти отсутствует, в силу молодости и нераскрученности. Так что смысл в нём есть:
Или он скоро исчезнет?
Как уже писали - исчезнуть он не может, т.к. OpenSource. Т.е. никто не отберёт у Вас написанное на нём, максимум будет ухудшаться развитие/поддержка, во что слабо верится, т.к у языка очень существенные плюсы.
По производительности для веб (готовые фреймворки) Go проигрывает только Java и С/С++ и наравне с node.js. При этом потребление ресурсов существенно ниже, чем у Java и производительность намного больше, чем у Python/Ruby.
При этом имеет просто офигенную многопоточную модель по сравнению с ними. Пока это лучшее, что я встречал для многопточки/асинхрона. При этом он поддерживает и классические паттерны вроде мьютексов и колбэков.
Он очень прост в освоении. Мне кажется даже элементарен, особенно если есть основа из Python/JavaScript. Есть также довольно занятная модель наследования, которая, как мне кажется более прозрачна чем классическое ООП, но немного непривычна поначалу.
Язык этот компилируемый и статически типизированный. Что даёт выявление многих ошибок задолго до продакшена. К примеру такие ошибки в Python выявляются только непосредственным тестированием и, если тестов нет, то шансов положить систему очень много. Тут же это исключается на этапе компиляции.
И, наконец, одна из главнейших фишек — не стоит бояться типизации и компиляции. В 145% случаев Вам не придётся объявлять тип переменой в коде — он задаётся автоматически при присвоении ей значения. Объявлять переменные заранее также не нужно.
Ну и компиляция — главный конёк. Время компиляции - это то, на что делается главный упор при разработке языка. Оно не отличается от времени запуска интерпретируемого языка. Т.е. система, написанная на go из нескомпилированных исходников запускается примерно с такой же скоростью как система аналогичной сложности, написанная на интерпретируемом языке.
Т.е. мы имеем плюсы из двух миров — скорость компиляции/запуска интерпретируемого и надёжность компилируемого языков. Плюc сверху производительность, мультипарадигменность (можно писать в функциональном стиле), простота и низкое ресурсопотребление.
Подходит ли это Вам - решать не мне. Мне — подходит, и я считаю его очень хорошим выбором для высоконагруженных сервисов (и не только).
--
Несколько серьезных вопросов:
Как делаются большие программы (много файлов + свои библиотеки функций (или классов?) на Go)? Как происходит сборка при изменении одной строки кода?
Как работать со "сторонним" кодом (например, С или С++)?
Взаимодействие с ОС. Поддерживается ли posix и в каком объеме?
Отладчик программы из нескольких процессов? Можно ли динамически подключаться отладчиком к уже работающим процессам?
--
И по мелочи:
Вы серьезно считаете отсутствие необходимости объявлять тип переменной плюсом?
Кстати, а вообще-то переменные в Go можно объявлять?
– avp May 30 '13 at 07:57пакеты?
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Я правильно понял, что в результате программирования мы получаем загрузочный модуль?
Можно ли его сделать статическим (независимым от .so (.dll в винде))?
При переносе нестатического модуля на другую машину какие усилия по установке требуются?
Правильно ли я понял, что попытаться работать со своими shared lib можно только через свой же Си (или я просто dlopen в Ваших ссылках не нашел)?
В Go есть "portable окошки" (виджеты, скажем, уровня Tk) для X-Windows и винды?
Реальная переносимость линукс-винда?
– avp May 30 '13 at 09:27Компилируется он в нативный код системы по-идее же. Тут пример вызова виндовых dll: http://j.mp/15l8DGE тут компиляция виндового экзешника под линём: http://j.mp/15l8OBW
– qnub May 30 '13 at 11:23И все-таки, у Вас есть опыт переноса Go программ между *nix и Windows и установки готового Вашего продукта на несколько машин?
Я имею в виду машины, на которых не стоит среда разработки.
--
Если да - то каковы впечатления?
– avp May 30 '13 at 11:47Многопоточность
Пока это лучшее, что я встречал для многопточки/асинхрона
А вот тут я бы привёл пример эрланга, вот там многопоточка так многопоточка.
– savva Jun 15 '13 at 12:39Но что на нем пишут?
Я написал на 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:25Go не может исчезнуть, это opensource.
Не люблю я эти фразы. Вот не будет никого коммьюнити, книг, курсов и тулзов - считай исчез. И что, что код на задворках гитхаба валяется
– kandi Jun 16 '14 at 17:48Думаю к описанным выше плюсам языка добавлять ничего. Понятно что человек придумавший язык Си, а теперь работающий в гугл и придумавший GO учёл всё и сделал действительно великолепный и простой язык. Учить стоит!
Учить не стоит если ты всю жизнь планируешь писать домашние странички на php, если ничего сложнее инет магазина не планируешь сделать. Просто выучить и никогда не использовать тоже не стоит...
Ещё на нём легко под Андроид пишутся программули и летают как ракеты!
Что ещё в нём хорошо, так это кроссплатформенность. Написал один раз и компилируешь под любую. Причём я на Винде сделал для Винды и для Линукса. Выгрузилась на Линукс и запустил без переделок...
Под Андроид все делает одна утилита gomobile. Причём и сразу может на смарт установить, если подключить шнурком.
http://habrahabr.ru/post/145796/ – ReinRaus Jun 15 '13 at 13:02