Go

Поделиться:

На вопросы о Go отвечали только те, кто выбрал его в качестве одного из трех основных языков программирования.

Для чего вы используете Go?

64%
65%

Для работы

28%
28%

Для личных/сторонних проектов

7%
5%

Хобби

2%
2%

Другое

Люди любят Go за его скорость и эффективность, отличную стандартную библиотеку, возможности параллелизма, простоту и лаконичность. Go, безусловно, готов к использованию в реальных бизнес-сценариях, и неудивительно, что доля тех, кто программирует на нем на работе, постоянно растет. Go используется в продакшене во многих крупных компаниях, включая Google, Dropbox, Microsoft, PayPal и Netflix.

В какой операционной системе вы обычно разрабатываете на Go?

58%

MacOS

45%

Linux

30%

Windows

11%

WSL

Наши данные в некоторой степени согласуются с тем, что мы видим в опросах, проводимых командой разработчиков языка. Go часто называют облачным языком, потому что он широко применяется для создания облачных приложений и DevOps-инструментов. Это объясняет, почему среди Go-разработчиков столь популярны Linux и macOS.

Используете ли вы несколько версий Go одновременно?

Только треть Go-разработчиков занимаются одним проектом — остальные работают над несколькими проектами одновременно.

Какие версии Go вы используете?

47%

1.20

46%

1.19

27%

1.18

11%

1.17

6%

1.16

3%

1.15

7%

Другое

У Go отличная обратная совместимость, но некоторые все равно предпочитают работать с несколькими версиями языка одновременно. Один из примеров – настройка системы непрерывной интеграции с двумя или тремя разными версиями Go с целью выявления регрессий и обнаружения других проблем.

Какой шаблонизатор вы используете для разработки на Go?

27%

html/template

16%

text/template

5%

Pongo2

2%

Plush

1%

Другое

61%

Никакие

Вполне логично, что html/template занимает первое место. Этот пакет автоматически экранирует потенциально опасное содержимое, например данные, сгенерированные пользователями, и помогает предотвращать атаки с внедрением кода.

Какие языки вы используете совместно с Go в одном проекте?

32%

JavaScript

28%

Python

26%

TypeScript

10%

C

6%

Rust

5%

C++

21%

Другое

По результатам недавнего опроса Go-разработчиков, 37% пользователей языка пишут на нем сайты и веб-сервисы. Это объясняет, почему так много респондентов используют JavaScript и TypeScript совместно с Go в одном проекте.

Высокое положение Python, вероятно, связано с тем, что многие Python-проекты переходят на Go. Когда разработчики решают добавить новые сервисы в проект, написанный на Python, они часто выбирают Go из-за его эффективности, поддержки параллелизма и высокой производительности в сетевых и веб-сервисах. У такого подхода есть недостатки, но он позволяет избежать переписывания кодовой базы.

Напоминаем, что в GoLand есть встроенная поддержка JavaScript и TypeScript, а для работы с Python можно установить плагин Python Community Edition.

Что вы разрабатываете на Go?

41%

Утилиты

37%

Веб-сайты

32%

IT-инфраструктура

27%

Библиотеки/фреймворки

24%

Системное ПО

19%

Инструменты для программирования

16%

Базы данных / хранилища данных

Используете ли вы рабочие пространства (go.work)?

Режим рабочего пространства появился в Go 1.18 и позволил одновременно работать над несколькими модулями без необходимости редактировать файлы go.mod для каждого модуля. Благодаря рабочим пространствам можно управлять всеми зависимостями с помощью файла go.work.

Какие веб-фреймворки для Go вы регулярно используете?

46%

51%

Gin

44%

43%

net / http

11%

13%

Echo

6%

6%

Beego

2%

2%

Buffalo

Как и год назад, фреймворк Gin остается самым популярным решением для веб-разработки, но и пакет net/http из стандартной библиотеки не сдает позиций. Разобраться в различиях между Gin и net/http поможет руководство по REST в Go.

Какой прокси Go Modules вы используете?

41%

Не пользуюсь прокси

27%

Открытый goproxy.io/goproxy.cn

21%

Открытый proxy.golang.org

12%

Выделенный goproxy

3%

Выделенный JFrog Artifactory

2%

Выделенный Athens

1%

Другое

8%

Не знаю

Используется ли в ваших проектах вендоринг?

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

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

Какой Go-роутер вы регулярно используете?

37%

Стандартная библиотека

27%

gorilla / mux

13%

go-chi / chi

4%

julienschmidt / httproute

4%

gocraft / web

1%

go-zoo / bone

10%

Другое

27%

Никакие

Два популярных роутера, gorilla/mux и go-chi/chi, до сих пор уступают стандартной библиотеке. Разобраться в различиях между gorilla/mux и стандартной библиотекой поможет руководство по REST в Go.

Какие фреймворки вы регулярно используете для тестирования?

34%

Пишу юнит-тесты, но не использую фреймворки

27%

testify

21%

gomock

5%

go-sqlmock

5%

ginkgo

3%

goconvey

2%

gomega

1%

godog

2%

Другое

23%

Не пишу юнит-тесты для Go

Сколько внешних зависимостей в ваших проектах?

Каков размер кодовой базы, с которой вы работаете в IDE или редакторе?

27%

24%

Менее 50 файлов

25%

24%

51–100 файлов

16%

19%

101–300 файлов

13%

15%

301–1 000 файлов

7%

7%

1 001–5 000 файлов

Используете ли вы дженерики?

22%

Да, регулярно

34%

Да, иногда

26%

Нет, но пробовал(а)

19%

Нет, и не пробовал(а)

Go-разработчики ждали поддержку дженериков с незапамятных времен, и в марте 2022 года она наконец появилась в Go 1.18. Спустя год больше 80% Go-разработчиков используют или пробовали использовать дженерики.

Для чего из перечисленного вы использовали TinyGo?

75%

Не использовал(а)

11%

Создание инструментов командной строки

9%

Проекты с WebAssembly

9%

Программирование микроконтроллеров

TinyGo демонстрирует отличные результаты при написании небольших и эффективных программ для встраиваемых систем или WebAssembly. Но как показывает наш опрос, этот компилятор также широко используют для создания интерфейсов командной строки. У Go отличная стандартная библиотека, но она может вам не понадобиться, если вы пишете CLI для базовых задач. В таком случае лучше выбратьTinyGo: он позволит сделать CLI компактным и точным.

Какие системы сборки вы регулярно используете?

87%

Go build

44%

Makefile

6%

Gradle

3%

Bazel

1%

Ничто из перечисленного

3%

Другое

Спасибо, что уделили время!

Если результаты исследования показались вам интересными, поделитесь ими с друзьями и коллегами.

Если у вас есть вопросы или пожелания, свяжитесь с нами по адресу surveys@jetbrains.com.