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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🤔 Context vs структура: следует ли передавать информацию, специфичную для запроса, через context.Context?

HTTP-обработчики могут использовать контекст для управления тайм-аутами запросов или отменой в рамках запроса. Тип Context также позволяет передавать значения (например, идентификатор пользователя, связанный с запросом) другим функциям.

Следует ли использовать этот механизм для передачи информации по цепочке вызовов запроса? Или лучше использовать обычную структуру?

Вот две причины, по которым использование Context для передачи значений может быть плохой идеей:

Значения в Context представляют собой пары ключ/значение, где ключ и значение являются пустыми интерфейсами (т. е. any). Другими словами, значения в контексте — это как мешок со всем подряд. Компилятор не может помочь вам отловить ошибки типов или даже проверить, есть ли информация. Удачи в устранении неполадок 😉

Если вы видите функцию, принимающую параметр Context, вы не можете сказать, что внутри. Если вы видите функцию, которая принимает параметр структуры, вы можете ясно видеть, что данные передаются, и что это за данные.

Но разве doSomething(ctx) не выглядит намного чище, чем doSomething(ctx, someStruct)?

Чистый код сам по себе не является целью. Код не чист только потому, что он короткий. Код чистый, если читатель может ясно видеть, что он делает.

Так context.WithValue() следует избегать?

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

💡Если данные важны для вашей бизнес-логики, не помещайте их в Context.

#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍17💯5🥱31
Optimizing Go string operations with practical examples.pdf
1.3 MB
👾Оптимизация строковых операций Go на примерах

Настало время Advent of Code, поэтому обработка строк приобретает первостепенное значение. Автор взял простую задачу со второго дня и ускорил ее почти в 5 раз с минимальными изменениями.

👉 Читайте на Medium или в PDF
🔥11👍2🤔1
🔤 Азбука SQL в примерах. Часть 2. Ограничения, которые упрощают жизнь

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

🔗 Читать статью
🔗 Зеркало
👍41🥱1
Давайте пофантазируем! Если отмотать время назад и вернуться к моменту, когда вы только выбрали Go для дальнейшего изучения и построения карьеры, ваше итоговое решение могло измениться?

💬 Вы выбрали бы Go? Может быть Python? Или Rust/C#/C/C++/PHP...?

👍 — конечно Go
🤔 — другой ЯП
👏 — я и так перешел на Go с другого языка
❤️ — ЯП не имеет значения — это всего лишь инструмент

#холивар
👏217131👍66🤔131
🗺 Визуализация картографических данных с помощью Go и Leaflet JS

Miki Tebeka из Ardan Labs решил визуализировать свои прогулки и написал простой сервис на Go, который принимает файл GPX с необработанными данными и возвращает интерактивную карту с отмеченным маршрутом. Под катом — примеры и подробное объяснение.

👉 Читать
👍23🔥4🤔1
⚡️Свершилось: канал с книгами только по Go

Мы создали для вас канал, куда будем публиковать самые полезные книги только для Go-разработчиков. Подписывайтесь!

👉Книги для Go разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁8🤔21
This media is not supported in your browser
VIEW IN TELEGRAM
👾 Ретроспектива Ebitengine в 2023 году

Ebitengine (ранее Ebiten) — популярный движок 2D-игр для Go, который позволяет создавать игры на многочисленных платформах, включая мобильные устройства и Nintendo Switch.

Разработчик движка Hajime Hoshi празднует десятилетие проекта и рассказывает, что произошло с ним в этом году. Под катом много интересного, включая видео некоторых выпущенных игр на базе Ebitengine.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥6🥱1
🧰 GitHub Actions CI/CD pipeline для деплоя Go-приложения: простой пример для Go-разработчика

Автор написал простейшее приложение и описал шаги по созданию пайплайна для деплоя веб-приложения на Linux-сервер. Ниже — его полный пример:

name: Golang-App-Workflow
'on':
push:
branches:
- main
jobs:
build-GoAppliation:
runs-on: ubuntu-latest

steps:

- name: Checkout-Repository
uses: actions/checkout@v4

- name: Setup-Golang
uses: actions/setup-go@v4
with:
go-version: '1.21'
check-latest: true
- run: go version

- name: Install-Golang-Dependencies
run: go mod download

- name: Build-Golang-App
run: GOOS=linux go build -o build/MusicAlbumAPI -v

- name: Display-Build-Golang-App
run: ls -R build/

- name: Create-Env-File
run: 'echo "APIKey=${{ secrets.APIKey }}" > build/.env'

- name: Display-Env-File
run: cat build/.env

- name: Run-Unit-Test-Golang-App
run: go test

- name: Copy-Build-Golang-App
uses: appleboy/scp-action@master
with:
host: '${{ secrets.VM_HOST }}'
username: '${{ secrets.VM_USERNAME }}'
key: '${{ secrets.VM_SSH_KEY }}'
port: '${{ secrets.VM_SSH_PORT }}'
source: build/
target: /var/www/GoApplications

- name: Deploy-Build-Golang-App-To-Ubuntu-VM
uses: appleboy/ssh-action@master
with:
host: '${{ secrets.VM_HOST }}'
username: '${{ secrets.VM_USERNAME }}'
key: '${{ secrets.VM_SSH_KEY }}'
port: '${{ secrets.VM_SSH_PORT }}'
script: |
cd /var/www/GoApplications/build
ls -l
sudo systemctl reload nginx
sudo systemctl status nginx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥92😁1
🏃 Самоучитель по Go для начинающих. Часть 2. Ресурсы для изучения Go с нуля

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

🔗 Читать статью
🔗 Ссылка на первую часть
🔥9👍31
🤔 Где искать библиотеки и инструменты для своих проектов?

🧰 Подборка для Go-разработчика:

🔗 pkg.go.dev

Здесь вы можете найдете пакеты по различным критериям и получите информацию о версии, лицензии и многом другом.

🔗 GitHub

Вводите в поисковую строку language:go + свой запрос и анализируете результаты.

🔗 Awesome Go

Один из самых старых и самых поддерживаемых кураторских списков по Go.

🔗 Libhunt.com

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

🔗 go-recipes

Тщательно подобранный список полезных Go-инструментов, разделенных на категориям.

#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123
💡20 советов по тестированию из доклада Расса Кокса на GopherCon Australia 2023

📌 Оставим их в оригинале:

1. Make it easy to add new test cases.
2. Use test coverage to find untested code.
3. Coverage is no substitute for thought.
4. Write exhaustive tests.
5. Separate test cases from test logic.
6. Look for special cases.
7. If you didn’t add a test, you didn’t fix the bug.
8. Not everything fits in a table.
9. Test cases can be in testdata files.
10. Compare against other implementations.
11. Make test failures readable.
12. If the answer can change, write code to update them.
13. Use txtar for multi-file test cases.
14. Annotate existing formats to create testing mini-languages.
15. Write parsers and printers to simplify tests.
16. Code quality is limited by test quality.
17. Scripts make good tests.
18. Try rsc.io/script for your own script-based test cases.
19. Improve your tests over time.
20. Aim for continuous deployment.

👉 Источник
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6🥱32
🤔 Запутались в кучах Go? Не волнуйтесь, вы не одиноки.

Max Hoffman из DoltHub заглянул под капот container/heap и обсудил различные аспекты реализации куч в Go, включая использование указателей на срезы и неизменяемые указатели, а также юзкейсы дженериков для упрощения работы с кучами.

👉 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥172👍2🥱1
📊 Топ-20 опенсорсных Go-проектов по количеству упоминаний в соцсетях: коллекция от LibHunt

Многие не нуждаются в представлении, но есть и те, о которых вы могли не знать:

🔧 ollama — инструмент для локального запуска больших языковых моделей.
🔧 tailscale — самый простой и безопасный способ использования WireGuard и 2FA.
🔧 rclone — rsync для облачного хранилища
🔧 cursusdb — высокопроизводительная, распределенная документо-ориентированная in-memory БД
🔧 zen — блокировщик рекламы и средство защиты конфиденциальности для Windows, macOS и Linux
🔧 LinGo — TUI для изучения языков с помощью текста.
🔧 cli — официальный CLI-клиент для GitHub
🔧 cerbos — масштабируемое решение для авторизации
🔧 upm — универсальный менеджер пакетов (Python, Node.js, Ruby, Emacs Lisp)
🔧 gron — grep для JSON
🔧 frankenphp — cовременный сервер PHP-приложений
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥234👍2🎉2
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣C#

Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
👍75