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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🖼️📝Gophercon India 2023: краткие заметки с конференции

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

1⃣Rubiks-Kube
2⃣Is unit testing an afterthought or a necessity?
3⃣Generics in Go
4⃣Metaprogramming in Go
5⃣Fuzz testing
6⃣Cache design patterns
7⃣Checkpoint Restoration Using CRIU
8⃣Dive into debugging distributed systems using Delve
9⃣Hardening Go Concurrency: using Formal methods to verify correctness
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1
🔗Cокращатель ссылок на Go: с нуля до деплоя

Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.

📺Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
💬Что из себя представляет паттерн «Функциональные опции» в Go и как его реализовать?

▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.

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

📌Базовый пример без функциональных опций:

type Server struct {
host string
port int
protocol string
}

func NewServer(host string, port int) *Server {
return &Server{
host: host,
port: port,
protocol: "http",
}
}


▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции NewServer, что может быть проблематично и несовместимо с предыдущими версиями, мы можем использовать функциональные опции.

👉 Сначала мы определяем функциональную опцию:

type ServerOption func(*Server)

👉 и функцию, удовлетворяющую типу:

func WithPort (port int) ServerOption {
return func(s *Server) {
s.port = port
}


👉 изменяем нашу функцию NewServer:

func NewServer(host string, opts ...ServerOption) *Server {
server : = &Server{
host: host,
port: 443,
protocol: "https"
}

for _, opt : = range opts {
opt (server)
}

return server

}


👉 и теперь мы можем делать вот так:

server1 := NewServer("localhost")
server2 := NewServer("localhost", WithPort(8080))


📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
37🔥21👍10🌚3😁1
🦙🚀 От проблем до идеи и реализации: VSCode LSP для Lama2 на Go

Погрузитесь в путешествие команды Hexmos, в котором она объединила возможности текстового REST API клиента Lama2 с VSCode с помощью Language Server Protocol.

👀 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠Решаем задачи по Go и практикуемся на квизах

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

👉Перейти в канал
👍3😁1
Go 1.21 включает предварительную версию изменения области видимости цикла for, которое команда Go планирует добавить в Go 1.22, устраняя одну из наиболее распространенных ошибок Go.

🤔 В чем сыр-бор?

На первом скрине код должен вывести "a,b,c", верно?

На самом деле мы получаем "c,c,c". Причины такого поведения описаны здесь.

Эту проблему также можно воспроизвести без конкурентности (второй пример).

Ошибка такого рода вызвала проблемы в проде у многих компаний, включая публично задокументированную проблему в Lets Encrypt.

📌В Go 1.22 команда Go планирует измененить циклы for, чтобы они имели область видимости для каждой итерации, а не для каждого цикла.

Чтобы обеспечить обратную совместимость с существующим кодом, новая семантика будет применяться только в пакетах, содержащихся в модулях, которые объявляют go >= 1.22 в файлах go.mod.

Go 1.21 включает предварительный просмотр изменения области видимости. Если вы скомпилируете свой код с переменной окружения GOEXPERIMENT=loopvarset, новая семантика будет применена ко всем циклам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20🤔8👍6🔥5
🤖Telegram-бот для новостей на Go, PostgreSQL и OpenAI API

Go-разработчик Ильдар Карымов делится опытом разработки Telegram-бота, который автоматически достаёт свежие новости и статьи про Go из разных источников, генерирует для них саммари с помощью ChatGPT, после чего публикует их в Telegram-канал.

📺Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍2😁1
Таненбаум vs Торвальдс (микроядро vs монолит)

Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».

Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.

А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.

Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах

#холивар
💯70👍38🥱16🤔11
Profiling_Go_Applications_in_the_Right_Way_with_Examples_by_Abdulsamet.pdf
5.5 MB
Правильное профилирование приложений с примерами: гайд для Go-разработчика

Профилирование — важный метод анализа приложений и выявления узких мест, снижающих производительность приложения.

Узнайте, как определить, какие части кода выполняются слишком долго или потребляют слишком много ресурсов.

👀 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🤔 Конкурентность — это не параллелизм

Перед вами полное изложение доклада Роба Пайка Concurrency is Not Parallelism. Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.

🤩 Читать
👍15🔥4
Это не реклама, а обзор книги «Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд.»

Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как конкурентность и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON и взаимодействие с базами данных.

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

👀Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍242🌚1
🧰 static-server — как python -m SimpleHTTPServer <port>, только на Go.

Развернуть статический файловый сервер на Go всегда было просто:

package main

import "net/http"

func main() {
port := ":8080"
handler := http.FileServer(http.Dir("."))
http.ListenAndServe(port, handler)
}


Но у Eli Bendersky есть другой способ. Стоит попробовать:

$ go run github.com/eliben/static-server@latest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
🔝 Приоритизация задач по методу MoSCoW: как за 5 минут научиться грамотно расставлять приоритеты

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

#туториал
👍31🔥1🤔1🥱1
Категоризация интерфейсов Go из стандартной библиотеки v1.21 — документ, который является частью большой работы (видимо, книги) и представляет собой отличный способ разобраться с работой интерфейсов под капотом.

📌Внутри следующие категории:

• Algorithms
• Data
• Drivers
• File systems
• Getting and/or Setting
• Implementation
• Membership
• Parsing
• Process control
• Protocols
• Reading and/or Writing
• Representation
• Subtypes

🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5
📖 100 ошибок в Go и как их избежать

Скорее всего, вы слышали о книге Teiva Harsanyi 100 Go Mistakes and How to Avoid Them. Возможно, вы не знаете, что в общем доступе есть сокращенная версия книги. В ней собраны все ошибки из книги.

🔗GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Битва за производительность: SparseMap vs GenerationsMap

Пока Искандер Шарипов занимался своими геймдев-задачами, натолкнулся на то, что get и set у sparse map из статьи Расса Кокса довольно медленные. Из-за чего преимущество быстрого reset иногда перекрывались.

То есть: что банальный слайс, что sparse map, давали +/- одинаковое время исполнения. В одном случае reset занимал больше времени, а в другом — время исполнения росло из-за более дорогих get+set.

А вот штука, описанная в статье, умеет и в мгновенный reset, и в более эффективные get+set.

🔗 Читать
🔥121
🦸 9 способов настройки градиента цели для поддержания мотивации

Разбираемся, как настроить себя идти до конца, преодолевая препятствия и лень.

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

#саморазвитие
🔥1🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
🧰fx долгое время был полезным инструментом для просмотра JSON-файлов, но за дело взялся SRE из Google Антон Медведев.

👨‍🔧Антон переписал fx с нуля, добавив новый тематический вид TUI, поиск по регулярным выражениям, нечеткий поиск и поддержку «даже самых массивных JSON-файлов».

🤩Поистине крутой инструмент и отличный пример использования преимуществ Go.

🔗fx 30.0.0
👍21🔥8