Библиотека Go-разработчика | Golang
23.3K 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
⚡️Самые полезные каналы по Go в одной папке

В ней:
канал для подготовки к собеседованиям
интересные задачи
основной канал (этот)
книги по Go
лучшие вакансии из сферы
и наш чат, в котором можно общаться и задавать вопросы

Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍5🥱3🌚2👏1
🧰 Goyek — библиотека для автоматизации задач, в которой последние определяются в стиле Cobra, а экшены напоминают юнит-тесты.

В версии 2.1 добавлена поддержка параллельного выполнения задач.

package main

import (
"flag"

"github.com/goyek/goyek/v2"
"github.com/goyek/x/cmd"
)

var msg = flag.String("msg", "greeting message", "Hello world!")

var hello = flow.Define(goyek.Task{
Name: "hello",
Usage: "demonstration",
Action: func(a *goyek.A) {
a.Log(*msg)
cmd.Exec(a, "go version")
},
})


👉 GitHub
👍10
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🌚2
💬 Как вам новый метод HTTP-роутинга[METHOD ][HOST]/[PATH], который ждет нас в Go 1.22?

mux := http.NewServeMux()

mux.HandleFunc("GET 127.0.0.1/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello")
})

mux.HandleFunc("GET localhost/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Bonjour")
})


👉 Подробнее
🤔25👍15🔥7🌚1
🚀 Colly: полное руководство по высокопроизводительному веб-скрейпингу на Go

Руководство основано на документации и дополнено наглядными примерами от автора.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20
🔄 Использование RabbitMQ streams в Go

Ранее Percy Bolmér исследовал возможности использования RabbitMQ в Go для построения Event Driven Architecture.

В новом руководстве он затрагивает тему Streams, которые привнесли в RabbitMQ множество функций и ранее были преимуществом Kafka.

📌 Из руководства вы узнаете:

🔸Что такое streams и как они работают
🔸Как использовать streams в Go
🔸Stream Core/Plugin и основные различия
🔸Subentries и Compression
🔸Deduplication
🔥19👍2
🤔 Как исключить зависимости разработки из бинарных файлов в Go: по мотивам статьи Redowan Delowar

В настоящее время, в отличие от Python или NodeJS, Go не позволяет указывать зависимости разработки отдельно от зависимостей приложения. Однако автор предпочитает явно указывать зависимости разработки для лучшей воспроизводимости.

Работая над новым CLI-инструментом для проверки неработающих URL-адресов в файлах markdown, автор столкнулся с интересным соглашением: можно указать зависимости разработки в файле tools.go и затем исключить их при сборке бинарного файла, используя тег сборки.

Вот как это работает. Предположим, у нашего проекта foo есть следующая структура:

foo
├── go.mod
├── go.sum
└── main.go


Файл main.go содержит простую функцию "hello-world", использующую стороннюю зависимость:

package main

import (
"fmt"

// Cowsay - это сторонняя зависимость приложения
cowsay "github.com/Code-Hex/Neo-cowsay"
)

func main() {
fmt.Println(cowsay.Say(cowsay.Phrase("Hello, World!")))
}


Здесь Neo-cowsay — это зависимость приложения. Для инициализации проекта запускаются следующие команды:

go mod init example.com/foo   # создает файлы go.mod и go.sum
go mod tidy # устанавливает зависимости приложения


Теперь предположим, что мы хотим добавить следующие зависимости разработки: golangci-lint для линтинга проекта в CI и gofumpt как более строгий gofmt. Поскольку эти инструменты не импортируются напрямую, они не отслеживаются инструментарием сборки.

Но можно воспользоваться следующим воркфлоу:

1. Разместить файл tools.go в корневой директории.
2. Импортировать зависимости разработки в этом файле.
3. Запустить go mod tidy, чтобы отслеживать как зависимости приложения, так и зависимости разработки через go.mod и go.sum.
4. Указать тег сборки в tools.go, чтобы исключить зависимости разработки из бинарного файла.

В этом случае файл tools.go выглядит следующим образом:

// go:build tools

package tools

import (
// Зависимости разработки
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
_ "mvdan.cc/gofumpt"
)


Теперь, если вы запустите go mod tidy, инструментарий Go будет отслеживать зависимости через файлы go.mod и go.sum. Вы можете проверить зависимости в go.mod.

Хотя зависимости разработки отслеживаются вместе с зависимостями приложения, тег сборки // go:build tools в начале файла tools.go скажет инструментарию сборки игнорировать их при создании бинарного файла.

Из корневой директории foo можно собрать проект, запустив:

go build main.go


Это создаст бинарный файл main в корневой директории. Чтобы убедиться, что бинарный файл не содержит зависимости разработки, запустите:

go tool nm main | grep -Ei 'golangci-lint|gofumpt'


Это не вернет ничего, если зависимости разработки не упакованы в бинарный файл.

Но если вы сделаете это для зависимости приложения, она выведет артефакты:

go tool nm main | grep -Ei 'cowsay'


Команда выведет:

1000b6d40 T github.com/Code-Hex/Neo-cowsay.(*Cow).Aurora
1000b6fb0 T github.com/Code-Hex/Neo-cowsay.(*Cow).Aurora.func1
1000b5610 T github.com/Code-Hex/Neo-cowsay.(*Cow).Balloon
1000b6020 T github.com/Code-Hex/Neo-cowsay.(*Cow).Balloon.func1
...


Если по какой-то причине вы хотите включить зависимости разработки в свой бинарный файл, вы можете передать тег tools при сборке бинарного файла:

go build --tags tools main.go


#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
👍332🤔2🥱2
🧰Ginkgo — современный Go-фреймворк для тестирования, который создан на основе пакета testing и дополнен библиотекой Gomega.

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

👉 GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱12👍62🥰2
🤖 Команда Google недавно сделала новое семейство мультимодальных ИИ-моделей Gemini доступным через API с щедрым уровнем бесплатного использования, а также выпустила SDK для нескольких популярных ЯП, включая Go.

Eli Bendersky показал простой пример работы с Go SDK, в котором текстовые вопросы к модели сочетаются с изображениями.

👉 Подробнее
🔥142👍2🤩2🌚2
Go-разрабы, кто-то из вас уже попробовал новый редактор Zed? Если да, то как впечатления?👇
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Программируйте со скоростью мысли


🛠 Zed — высокопроизводительный многопользовательский редактор кода с открытым исходным кодом от создателей Atom и Tree-sitter. Он сочетает в себе мощь IDE с оперативностью легкого редактора, обеспечивая производительность, которую вы можете почувствовать под рукой.

📌 Он написан на Rust и поддерживает:

Полное синтаксическое дерево для каждого буфера по мере ввода, обеспечивая точную подсветку кода, автоматический отступ, просмотр схемы с возможностью поиска
GitHub Copilot с возможностью генерации/рефакторинга кода с помощью GPT-4
Встроенный полнофункциональный терминал для доступа к командной строке
Модальное редактирования в стиле Vim, а также использование хоткеев и командной палитры
Работу с кодом на любом устройстве
Набор светлых/темных тем, а также возможности кастомизации
Каналы для обсуждения, планирования и написания кода с командой, включая возможности аудио и текстового чата

👉 GitHub
👉 Сайт
🤔21🥱105👍1
Хотите интегрировать функциональность JavaScript в Go-проект? Просто используйте goja, движок ECMAScript/JavaScript, разработанный на чистом Go.

Он позволяет интегрировать функциональность JavaScript непосредственно в проекты на Go, без необходимости использования внешних JS-движков👇

🔗
GitHub
14😁11🌚5👍3🤔3
💡Go 1.22 в деталях: разработка новых фич за кулисами

🔸 reflect.TypeFor
🔸 slices.Concat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
🏃 Самоучитель по Go для начинающих. Часть 6. Функции и аргументы. Области видимости. Рекурсия. Defer

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

👉 Читать статью
👉 Часть 1
👉 Часть 2
👉 Часть 3
👉 Часть 4
👉 Часть 5
👍14🥱71🤔1
😂 Анонимная сеть Hidden Lake на практике

Hidden Lake — по умолчанию F2F (friend-to-friend) сеть, где каждый пользователь устанавливает доверенных участников, с которыми впоследствии будет связываться и которые смогут отправлять ему сообщения.

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

Это все понятно и хочется практики? Автор демонстрирует пример файлообменника на основе сети Hidden Lake, разработанный на Go.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤔8👏1