Стандартная библиотека языка Go: GUI и базы данных
Содержание:
1. Стандартная библиотека;
2. Сеть и веб-приложения;
3.GUI и базы данных (Вы читаете данный раздел);
4. Будущее «новой волны».
В стандартной библиотеке нет пакетов для работы с GUI и базами данных, но есть сторонние обертки для многих библиотек, написанных на Си: http://go-lang.cat-v.org/library-bindings. Из баз данных доступны целых четыре обертки для sqlite3 и три для MySQL. Также есть две обертки для ODBC и, как ни странно, только одна для PostgreSQL.
Такое дублирование сильно затрудняет выбор оптимального пакета, поскольку приходится сначала разбираться в различиях между разными обертками и их качеством. Поскольку никаких встроенных средств для работы с базами данных в Go не предусмотрено, уровень абстракции при их использовании полностью определяется выбранной оберткой. В целом этот уровень очень близок с исходному API, т.е. довольно низок. Работать с базами данных в Go так же скучно, как и в Си.
Язык Go изначально не рассчитан на десктопные графические программы и его создатели прямо указывают, что предпочтительный способ создания пользовательского интерфейса на Go - написание веб-приложений. Однако веб-приложения подходят далеко не для всех задач, а «спагетти» из HTML, javascript, CSS и Go, неизбежно возникающее при их написании, на мой взгляд, выглядит далеко не так элегантно, как монолитная программа, полностью написанная на одном языке. Естественно, что в Go появились привязки к различным GUI-тулкитам.
На сегодняшний день они существуют для GTK+, wxWidgets, FLTK и IUP. Наиболее зрелой и полной является привязка go-gtk (https://github.com/mattn/go-gtk). По сути она не более, чем тонкая прослойка, добавляющая объектно-ориентированную нотацию, но в целом ничем не отличается от жутковатого API из GTK+.
Так ли хорош язык Go, как его рекламирует Google? Оценка языка программирования всегда очень субъективна и сильно зависит от решаемых задач, но постараюсь все же ее дать. Язык Go не универсален, не особенно быстр и, на мой вкус, не особенно красив синтаксически и идейно. В нем недостает многих привычных вещей, таких как нормальное наследование и обобщенные классы. Стандартную библиотеку нахожу эклектичной и не особенно продуманной - взять хотя бы упомянутую путаницу в методах контейнерных классов. Создается впечатление, что и сам язык, и стандартная библиотека создавались очень быстро, в спешке. Зато на Go очень легко работать с нитями и организовывать их параллельное взаимодействие. Впрочем, пожалуй, это и всё, чем он заметно превосходит другие языки новой волны (кстати, работа с нитями в D реализована немногим сложнее). Вот в чем Go на голову превосходит конкурентов, так это в качестве документации и рекламе.

Эмблема Plan 9
Лично у меня осталось негативное впечатление от Go. Сложилось впечатление, что своим успехом он обязан больше тому, что за ним стоит всесильный Google, а не своими объективными качествами. Будь Go создан малой группой энтузиастов, вряд ли он стал бы известнее своего идейного предшественника Limbo, о котором знают лишь немногие люди, причастные к «субкультуре» системы Plan 9.
1. Стандартная библиотека;
2. Сеть и веб-приложения;
3.
4. Будущее «новой волны».
В стандартной библиотеке нет пакетов для работы с GUI и базами данных, но есть сторонние обертки для многих библиотек, написанных на Си: http://go-lang.cat-v.org/library-bindings. Из баз данных доступны целых четыре обертки для sqlite3 и три для MySQL. Также есть две обертки для ODBC и, как ни странно, только одна для PostgreSQL.
Такое дублирование сильно затрудняет выбор оптимального пакета, поскольку приходится сначала разбираться в различиях между разными обертками и их качеством. Поскольку никаких встроенных средств для работы с базами данных в Go не предусмотрено, уровень абстракции при их использовании полностью определяется выбранной оберткой. В целом этот уровень очень близок с исходному API, т.е. довольно низок. Работать с базами данных в Go так же скучно, как и в Си.
Язык Go изначально не рассчитан на десктопные графические программы и его создатели прямо указывают, что предпочтительный способ создания пользовательского интерфейса на Go - написание веб-приложений. Однако веб-приложения подходят далеко не для всех задач, а «спагетти» из HTML, javascript, CSS и Go, неизбежно возникающее при их написании, на мой взгляд, выглядит далеко не так элегантно, как монолитная программа, полностью написанная на одном языке. Естественно, что в Go появились привязки к различным GUI-тулкитам.
На сегодняшний день они существуют для GTK+, wxWidgets, FLTK и IUP. Наиболее зрелой и полной является привязка go-gtk (https://github.com/mattn/go-gtk). По сути она не более, чем тонкая прослойка, добавляющая объектно-ориентированную нотацию, но в целом ничем не отличается от жутковатого API из GTK+.
Выводы
Так ли хорош язык Go, как его рекламирует Google? Оценка языка программирования всегда очень субъективна и сильно зависит от решаемых задач, но постараюсь все же ее дать. Язык Go не универсален, не особенно быстр и, на мой вкус, не особенно красив синтаксически и идейно. В нем недостает многих привычных вещей, таких как нормальное наследование и обобщенные классы. Стандартную библиотеку нахожу эклектичной и не особенно продуманной - взять хотя бы упомянутую путаницу в методах контейнерных классов. Создается впечатление, что и сам язык, и стандартная библиотека создавались очень быстро, в спешке. Зато на Go очень легко работать с нитями и организовывать их параллельное взаимодействие. Впрочем, пожалуй, это и всё, чем он заметно превосходит другие языки новой волны (кстати, работа с нитями в D реализована немногим сложнее). Вот в чем Go на голову превосходит конкурентов, так это в качестве документации и рекламе.

Эмблема Plan 9
Лично у меня осталось негативное впечатление от Go. Сложилось впечатление, что своим успехом он обязан больше тому, что за ним стоит всесильный Google, а не своими объективными качествами. Будь Go создан малой группой энтузиастов, вряд ли он стал бы известнее своего идейного предшественника Limbo, о котором знают лишь немногие люди, причастные к «субкультуре» системы Plan 9.