Библиотека Go-разработчика | Golang
23.3K subscribers
2.08K photos
42 videos
87 files
4.46K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
⚡️С выпуском версии 9.3.0 официальный клиент Redis делает большой шаг вперед благодаря прямой поддержке JSON

📌Простой пример того, как начать работу с JSON в Go-Redis:

var ctx = context.Background()
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})

type Bicycle struct {
Brand string
Model string
Price int
}

bicycle := Bicycle{
Brand: "Velorim",
Model: "Jigger",
Price: 270,
}

_, err := client.JSONSet(ctx, "bicycle:1", "$", bicycle).Result()
if err != nil {
panic(err)
}

res, err := client.JSONGet(ctx, "bicycle:1", ".Model").Result()
if err != nil {
panic(err)
}
fmt.Println("bicycle:1 model is", res)

#новости #инструменты
👍50🔥8🎉53🥱1
Хотите готовиться к собеседованию по Go и не только на реальных примерах? Тогда пост ниже для вас👇
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🙇‍♂️Коллекция тестовых заданий для самостоятельного выполнения от разных ИТ-компаний, собранная сообществом вместе с командой Хекслет: маст-хэв при подготовке к собесу.

🔗 GitHub
👍15
🥳Сегодня четырнадцатый день рождения релиза Go с открытым исходным кодом: за плечами у команды Go и сообщества два полнофункциональных релиза и другие важные фичи

☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки

👉 Подробнее в статье Расса Кокса
🎉29👍3
Гайд по разработке системы уведомлений в реальном времени с помощью Go + Kafka:

Что такое Kafka?
Как настроить рабочее пространство проекта?
Как создать модели пользователя и уведомлений?
Как настроить Kafka producer?
Как настроить Kafka consumer?
Тестирование проекта

👉 Читать
👍162😁1
🔍Статические SQL-запросы часто оказываются недостаточными при необходимости создания условных запросов, а разработка динамических запросов в Go требует глубоких знаний SQL и тонкостей работы с языком.

🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.

📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.

t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
if err != nil {
return err
}

insertStmt, insertArgs, err:= t.Compile(`{{ $length := sub ( len . ) 1 }}
INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at')
VALUES {{ range $i, $v := . }}
( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}},{{else}};{{end -}}
{{end}}`, todos)

if err != nil {
return err
}

_, err := db.Exec(insertStmt, insertArgs...)


👉 GitHub
🔥6👍32🌚1
🔧NilAway — инструмент статического анализа для обнаружения потенциальных nil-паник в коде на Go, который позволяет ловить их во время компиляции, а не во время выполнения.

🤩Команда Uber постаралась, сделав похожий на nilness инструмент с гораздо более сложными и мощными методами статического анализа для отслеживания потоков nil как внутри пакета, так и между пакетами.

var p *P
if someCondition {
p = &P{}
}
print(p.f)


Результат👇

go.uber.org/example.go:12:9: error: Potential nil panic detected. Observed nil flow from source to dereference point:
-> go.uber.org/example.go:12:9: unassigned variable p accessed field f
👍45🔥2😁1
Разработка высокопроизводительного синтаксического анализатора JSON: от теории к практике

Создать синтаксический анализатор JSON непросто, а создать быстрый — еще сложнее. В выступлении на GopherCon Signapore 2023 Дэйв Чейни демонстрирует, как написать высокопроизводительный синтаксический анализатор JSON. Ниже — сценарий выступления, превращенный в статью в блоге.

👉 Читать
👍5
📊 Егор Толстой и Анна Симонова опросили 500 Go-разработчиков и узнали много интересного: для каких задач используют Go, насколько часто применяют дженерики, какие инструменты в арсенале. А кроме этого, собрали большой список самых полезных книг, курсов, подкастов и Telegram-каналов.

📌Основные тезисы:

◆ Большинство участников опроса оценивают свой уровень как Middle и Senior.
◆ До Middle Go-разработчик обычно растет 1-2 года, а тимлидом может стать уже через 3.
◆ В основном Golang применяется в продуктовой разработке на проектах большого масштаба.
◆ Большинство пришло в Go из других ЯП. Среди неожиданных профессий: кладовщик, нефтяник, врач и музыкант. 17% Go‑разработчиков начали свою карьеру в IT сразу с Golang. Чаще всего в Golang приходят из Python и PHP.
◆ Для большинства опрошенных Go — основной язык программирования.
◆ Почти половина опрошенных в качестве второго регулярно используемого языка выбирают Python. А треть — JavaScript.
◆ Половина опрошенных переписывала сервисы на Go с других языков. В основном с PHP.
◆ Подавляющее большинство опрошенных используют Go для микросервисов.
◆ Основная IDE для работы — GoLand / IntelliJ IDEA.
◆ Больше половины Go-разработчиков работают с macOS.
◆ Абсолютное большинство готово использовать Go не только для работы, но и для написания пет‑проектов.
◆ Вне зависимости от грейда, Go‑разработчики заинтересованы в прокачке знаний по архитектуре и распределенным системам.
◆ Дженерики ждали все, а в итоге регулярно используют только 10% разработчиков.
◆ Каждый пятый Go-разработчик ждет того часа, когда в языке оптимизируют процесс обработки ошибок.
◆ Лишь треть опрошенных пользуется AI‑инструментами на регулярной основе.
◆ Основные источники знаний для большинства Go-разработчиков — это чтение статей и просмотр YouTube.
◆ Каждый шестой Go-разработчик открывал в этом году книги Роберта Мартина.
◆ Треть разработчиков обучались Go не самостоятельно, а на профильных курсах.
◆ 30% Go-разработчиков живут не в России. Больше половины переехали в последние 1,5 года.
◆ Большинство Go-разработчиков не планируют менять место работы.
◆ Самый частый способ выхода из Go — переход в управление разработкой или смена ЯП.
◆ 40% тех, кто хочет сменить язык программирования, в первую очередь смотрят на Rust.

👉 Читать исследование

#аналитика
👍2341
⚒️Как использовать ресурсы Kubernetes по максимуму для работы с Go-приложениями

Антон Жуков, руководитель группы разработки в Сбермаркете, делится опытом работы с Kubernetes.

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

В конце описан кейс настройки GOMAXPROCS на примере реального приложения, которая привела к повышению производительности на 20-50%.

👉 Читать
👍171
🤔 Сложно ли поменять стек разработки?

Выйти на тот же уровень производительности в другом стеке в том же направлении (бэкенд/фронтенд) может занять от нескольких месяцев до полугода. Конечно, у каждого это время различается, но в любом случае оно включает:

✔️Изучение нового языка
✔️Ознакомление с экосистемой языка
✔️Понимание инфраструктуры (сборка, доставка и т. д.)

💬 А вы меняли стек? Сколько времени это заняло?

#холивар
👍141
This media is not supported in your browser
VIEW IN TELEGRAM
🤩Следующее поколение CLI

Charmbracelet, создатели CLI-пакетов для Go, задумали что-то грандиозное. Они собрали 6 миллионов долларов на создание CLI-инструментов «следующего поколения».

Подробности о планах еще впереди, а сейчас можно ознакомиться с пакетами и инструментами, которые Charmbracelet выпустила на данный момент: от Glow, Glamour и LipGloss до SoftServe, Wish и VHS.

👉 Читать
👍412🔥1😁1🌚1
💡Различные способы использования go get

🔸Вы, конечно, знаете, как получить последнюю версию модуля:

Либо для конкретного модуля...

$ go get golang.org/x/net


...либо для всех зависимостей главного модуля:

$ go get -u ./...


🔸Чтобы обновить все зависимости до последних патч-релизов текущей версии, используйте:

$ go get -u=patch ./...


🔸Но это еще не все. Например, вы можете обновить или понизить версию модуля до конкретной версии:

$ go get golang.org/x/text@v0.3.2


🔸Вы не ограничены использованием семантического номера версии. Вы можете использовать @latest, чтобы обновиться до последней версии, или @patch, чтобы обновиться до последнего патч-релиза. Или можете указать конкретную ветку VCS.

🔸Например, эта команда обновит модуль до последнего коммита в главной ветке модуля:

$ go get golang.org/x/text@main


🔸Вы даже можете удалить зависимость. Эта операция даже понижает версии модулей:

$ go get golang.org/x/text@none


🔸Команда go get может быть применена даже к инструментарию Go. Эта команда обновляет минимально требуемую версию Go для главного модуля (то есть обновляет директиву go в go.mod) и даже загружает последнюю или указанную версию инструментария, если это необходимо:

$ go get go
$ go get go@v1.21.4


🔸Начиная с Go 1.21, go mod также может предложить версию инструментария Go для компиляции модуля, используя директиву toolchain (в отличие от директивы go, которая устанавливает минимально требуемую версию Go для модуля). Директива go остается неизменной. Как и в случае с go get, вы можете использовать @patch, чтобы обновиться до последнего патч-релиза текущего инструментария Go.

$ go get toolchain
$ go get toolchain@v1.21.4
$ go get toolchain@patch
28👍10🔥2🤔1
💡Начиная с Go 1.22, функции Delete/DeleteFunc/Compact/CompactFunc/Replace в пакете стандартной библиотеки slices обнуляют освобожденные элементы, чтобы избежать потенциальной утечки памяти.

👉 Речь про этот proposal.

#новости
🔥26👍3