Библиотека 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: по мотивам статьи 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
🧰 memos — опенсорсный self-hosting инструмент для заметок, ориентированный на конфиденциальность. Под капотом используется Go + Echo + SQLite и TypeScript.

📌 GitHub & Сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
21
🤩 Пополняемый плейлист с докладами на конференции GopherCon 2023:

🌐 Обзор изменений в Go, Russ Cox
🌐 Будущее JSON в Go, Joe Tsai
🌐 Постулаты, которые помогут преодолеть синдром самозванца, Kate Pond: переосмысление постулатов Go, представленных Робом Пайком в 2015 году

#чтопроисходит
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1
👨‍🎓 Опытные разработчики часто дают совет начинающим: «Лучший способ стать лучше в любом языке программирования — писать больше кода и как можно больше практиковаться».

🤩 Поначалу это действительно так, но по мере того, как вы начнёте осваивать язык, лучший способ совершенствоваться — это также читать код других разрабов.

📌 Вот несколько случайных проектов, с которых можно начать:

🔧 xbar — позволяет поместить выходные данные любого скрипта/программы в строку меню macOS
🔧 service — стартовый набор для написания сервисов на Go с использованием Kubernetes
🔧 Bubble Tea — мощный легковесный TUI-фреймворк
🔧 GoBoy — эмулятор Nintendo GameBoy и GameBoy Color, написанный на go
🔥11
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 Baby API — простой Go CRUD API фреймворк. Вы можете использовать его для кастомной обработки запросов/ответов с помощью реализованных Renderer и Binder из go-chi/render.

Используйте предоставленные функции расширения для добавления дополнительных функций API: OnCreateOrUpdate, Storage, AddCustomRoute, Patch и многие другие.

package main

import "github.com/calvinmclean/babyapi"

type TODO struct {
babyapi.DefaultResource

Title string
Description string
Completed bool
}

func main() {
api := babyapi.NewAPI[*TODO](
"TODOs", "/todos",
func() *TODO { return &TODO{} },
)
api.RunCLI()
}


Чтобы показать фреймворк в действии, автор написал простой веб-проект с помощью HTMX и Go. Все подробности — под катом.

👉 Читать
👍11
This media is not supported in your browser
VIEW IN TELEGRAM
😳🧰 Апгрейд нод Kubernetes без простоев продакшена

#жиза
Please open Telegram to view this post
VIEW IN TELEGRAM
😁60🔥8👾2👍1