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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🫶 Представлен второй релиз-кандидат Go 1.22

Официальный релиз совсем близко, но вы уже сейчас можете протестировать новые фичи языка!

📣 Анонс
🗃 Скачать

#новости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🥱3
👨‍💻🧩 Психология и ИТ: 17 личностных качеств, необходимых для успешной карьеры

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

Читать статью

#новость
👍8😁2🌚21
Представьте, что вы оказались в сложной ситуации, и вам нужно принять решение. Какого сотрудника вы возьмете в команду?
Anonymous Poll
18%
С достойным портфолио и хард-скиллами, но неприятного в общении
61%
Легкого в общении и целеустремленного, но проседающего в технических навыках
20%
Посмотреть результаты
🌚9😁1
🔥Оптимизация производительности в Go на практике

Команда Sourcegraph делится опытом оптимизации некоторых базовых математических операций в Code AI и описывает различные этапы оптимизации, начиная с простой реализации на Go и постепенно углубляясь в оптимизацию: от loop unrolling до bounds check elimination.

Но настоящий прорыв произошел при использовании SIMD (single instruction, multiple data) и quantization. Этот опыт показал, насколько мощным может быть низкоуровневое программирование даже в таком высокоуровневом языке, как Go👇

🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🌚2
⚡️Самые полезные каналы по 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