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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🎧 Подкаст Cup o' Go #100 — вечеринка в честь релиза Go 1.24

Обсудили ключевые изменения в Go 1.24, работу с SQL NULL и компиляцию shell-скриптов в бинарники.

Не обошлось без докладов с GopherCon и новостей об окончании поддержки Go 1.14-1.19.

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика #подкаст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚡️ Софт-скиллы, которые выведут карьеру в IT на новый уровень

Многие говорят о лидерстве, коммуникации и умении презентовать себя. Но будущее требует других навыков. Разбираем неочевидные soft skills, которые помогут прокачаться в IT и за рубежом.

➡️ Что внутри

▪️ Эмоциональный интеллект

▪️ Умение упрощать

▪️ Антихрупкость

▪️ Мультикультурность

▪️ Предпринимательское мышление


Эти навыки решают. Кто хочет оставаться в топе — развиваемся уже сейчас.

🔵 Подтяните свои знания о машинном обучении вместе с нашим курсом «Базовые модели ML и приложения»

🔗 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱52👍2🔥1
🏭 WebAssembly: новые возможности в Go 1.24

Go 1.24 добавляет директиву go:wasmexport, упрощая экспорт функций в WebAssembly и улучшая взаимодействие с WASI.

Теперь можно создавать WASI-реакторы для многократных вызовов без переинициализации — идеально для долгоживущих WASM-приложений.

➡️ Подробнее на go.dev

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍183
🔠 Погружение в UTF-8

Раньше ASCII поддерживал только 128 символов. UTF-8 решил эту проблему, используя 1–4 байта для кодирования символов Unicode. Go, ориентированный на современные веб-приложения, встроил поддержку UTF-8 на базовом уровне.

Работа с UTF-8 в Go:

В Go строки — это срезы байтов. Это значит, что функция len()покажет длину в байтах, а не количество символов. Чтобы правильно работать с UTF-8, Go предоставляет пакет unicode/utf8:
import "unicode/utf8"

func main() {
str := "Hello, 世界"
fmt.Println("Bytes:", len(str))
fmt.Println("Runes:", utf8.RuneCountInString(str))
}

Результат покажет, что len() выдаст 13 байтов, хотя символов всего 9. Это потому, что 世界 занимает по 3 байта каждый.

Ошибки и подводные камни:

Одна из распространённых ошибок — неверное предположение, что каждый символ занимает 1 байт. При обрезке строк или подсчёте символов важно использовать utf8-функции.

Также стоит помнить о валидации. Функция utf8.Valid() поможет убедиться, что данные корректны:
if !utf8.Valid(data) {
log.Fatal("Invalid UTF-8 data")
}


📎 Подробнее про UTF-8 в Go

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍263
💬 TCP-чат на Go

TCP обеспечивает передачу данных без потерь — идеальный выбор для чата. В Go есть встроенный пакет net, который работает с TCP-соединениями.

Основные шаги:

1️⃣ Создание TCP-сервера: используем net.Listen() для ожидания подключений.

2️⃣ Обработка клиентов: каждое подключение — отдельная горутина.

3️⃣ Передача сообщений: Сервер читает сообщения и рассылает их другим клиентам.

4️⃣ Управление подключениями: Нужно учитывать отключения и ошибки.

TCP-чат на Go — отличный проект, чтобы понять сетевое программирование, горутины и каналы.

📎 Подробное руководство со всеми примерами

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7🥱6
🔤 Многоточие в Go

Многоточие (...) в Go — инструмент, который делает язык более гибким и удобным для работы с функциями, принимающими переменное количество аргументов.

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

Вариативные Функции

Основное применение многоточия в Go — это определение вариативных функций. Такие функции могут принимать любое количество аргументов. Пример:
func example(args ...int) {
for _, arg := range args {
fmt.Println(arg)
}
}


Вызывать эту функцию можно с разным количеством аргументов:
example(1, 2, 3)
example(4, 5, 6, 7, 8)


Передача Срезов

Многоточие позволяет передавать срезы в вариативные функции. Это удобно, когда у вас уже есть срез, и вы хотите передать его элементы в функцию. Пример:
slice := []int{1, 2, 3}
example(slice...)


Командная Строка

В командной строке Go многоточие используется как подстановочный знак, обозначающий "всё в этой директории и всех поддиректориях". Это упрощает выполнение команд для всех файлов в проекте.

Вариативные Интерфейсы

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

Пример:
func printAll(args ...interface{}) {
for _, arg := range args {
fmt.Println(arg)
}
}


Вызов функции:
printAll(1, "string", 3.14)


🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥42😁1👾1
🔐 Google OAuth 2.0 в Go и React.js

OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.

Настройка Google Cloud:

Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.

Бэкенд на Go:

Используйте пакет golang.org/x/oauth2.

Настройте маршруты: /login, /callback, /logout.

Храните access_token и refresh_token в httpOnly cookies.

Пример:

conf := &oauth2.Config{ClientID: "...", RedirectURL: "..."}
url := conf.AuthCodeURL("state")


Фронтенд на React:

Создайте AuthProvider с контекстом.

Настройте Axios-интерцепторы для обновления токенов:
axios.interceptors.response.use(resp => resp, async error => { ... });


Ошибки и нюансы:

• Используйте httpOnly cookies для безопасности.

• Не храните client_secret на фронтенде.

• Обновляйте токены до их истечения, чтобы избежать разлогина пользователей.

📎 Подробный гайд с кодом

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73👏2
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
👍4
⭐️ Starskey – быстрая key-value база данных на Go

Starskey – это key-value хранилище, написанное на Go. Оно основано на концепции LSM-дерева (log-structured merge tree).

Преимущества:
Cкорость работы — оптимизированная запись и чтение с помощью LSM-дерева.

ACID-транзакции обеспечивают целостность данных.

Удаление «мусорных» ключей — автоматическая компактификация на уровнях базы.

Минимальные зависимости — лёгкая интеграция в проекты на Go.

Пример:
package main

import (
"fmt"
"log"

"github.com/starskey-io/starskey"
)

func main() {
// Открываем или создаём новую базу
db, err := starskey.Open("data.db", nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()

// Записываем данные
err = db.Put([]byte("username"), []byte("admin"))
if err != nil {
log.Fatal(err)
}

// Читаем данные
value, err := db.Get([]byte("username"))
if err != nil {
log.Fatal(err)
}
fmt.Println("Username:", string(value))
}


Starskey подходит для встроенных решений, кеширования, локального хранения данных и даже небольших NoSQL-баз.

📎 Подробнее о проекте

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👾10👍3
🎮 Minecraft на Go

Мы нашли полноценную игру в стиле Minecraft, написанную на Go с OpenGL.

Этот проект – пример чистого кода и глубокого понимания 3D-графики, физики и генерации мира.

Как запустить

1. Склонируйте репозиторий
git clone https://github.com/GianlucaP106/minecraft && cd minecraft


2. Запустите
go run .


Это не просто игра, а учебный материал для тех, кто хочет изучить разработку 3D-игр без движков.

➡️ Репозиторий проекта на GitHub

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👾14👍7
🌻 Мапа со швейцарской таблицей

В Go 1.24 map реализован с использованием швейцарской таблицы (Swiss Table). Разберёмся, что это значит для разработчиков и как это влияет на производительность.

Что такое швейцарская таблица

Швейцарская таблица – это продвинутый алгоритм хеш-таблиц, разработанный Google для библиотеки Abseil. Она отличается высокой плотностью хранения данных и уменьшенной нагрузкой на кеш процессора.

Главные фишки:

• Компактное представление — хранит метаданные ключей рядом с хешами, что сокращает использование памяти.

• Эффективное разрешение коллизий — используется пробирование с SIMD: процессор обрабатывает сразу несколько элементов одновременно.

• Быстрое сканирование — поиск ключей стал намного быстрее за счёт оптимизированных операций.

Мапа в Go теперь занимает на 15-25% меньше памяти, а производительность ускорилась на 5-15%. Если в вашем коде активно используется map, он автоматически станет быстрее, потому что внешне ничего не поменялось.

➡️ Подробности реализации новой map

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥123
👉👈 Алгоритм двух указателей

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

Как это работает

1️⃣ Два указателя устанавливаются в разные точки структуры данных (например, на начало и конец массива).

2️⃣ Они перемещаются в зависимости от условий задачи, например:

• Навстречу друг другу — для поиска пар, например, в задачах на сумму двух чисел.

• В одном направлении, но с разной скоростью — для удаления дубликатов или поиска подстроки.

3️⃣ Процесс продолжается, пока указатели не пересекутся или не выполнится нужное условие.

Виды двух указателей

➡️ Два указателя навстречу друг другу

Пример: Проверка, является ли строка палиндромом.
func isPalindrome(s string) bool {
i, j := 0, len(s)-1
for i < j {
if s[i] != s[j] {
return false
}
i++
j--
}
return true
}


1. Один указатель (i) начинает с начала, другой (j) – с конца строки.

2. Если s[i] == s[j], двигаем оба указателя к центру.

3. Если где-то символы не совпадают – это не палиндром.

➡️ Два указателя в одном направлении

Пример: Удаление дубликатов из отсортированного массива.
func removeDuplicates(nums []int) int {
if len(nums) == 0 {
return 0
}
j := 0
for i := 1; i < len(nums); i++ {
if nums[i] != nums[j] {
j++
nums[j] = nums[i]
}
}
return j + 1
}


1. Один указатель (i) двигается по массиву, второй (j) отслеживает уникальные элементы.

2. Если встречаем новый элемент, перемещаем его вперед.

➡️ Быстрый и медленный указатели

Пример: Нахождение цикла в связном списке (алгоритм Флойда).
type ListNode struct {
Val int
Next *ListNode
}

func hasCycle(head *ListNode) bool {
slow, fast := head, head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
if slow == fast {
return true
}
}
return false
}


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

2. Если fast догоняет slow, значит, есть цикл.

3. Если fast достиг конца (nil), цикла нет.

Алгоритм двух указателей – это оптимальный способ обработки массивов и списков, уменьшая сложность O(N²) → O(N).

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥113🤔1🤩1
👉 Интенсив «Архитектуры и шаблоны проектирования» для middle и senior-разработчиков

Проверьте свои знания, ответив на 8 вопросов – https://proglib.io/w/7af8c5cc

🧐 Кому подойдет?
Разработчикам, которые знают любой объектно-ориентированный язык программирования и хотят углубиться в архитектурные паттерны.

🎮 Как проходит обучение?
В течение всего интенсива вы будете создавать игру «Звездные войны» и применять ключевые архитектурные паттерны. В процессе изучите:
– Как строить гибкую архитектуру, которая не замедляет разработку
– Как применять IoC-контейнеры и писать модульные тесты
– Как использовать SOLID за пределами ООП
– Как внедрять CI/CD и снижать технический долг

👉 Подробная программа обучения

А по промокоду MIDDLE до 28 февраля вы получите дополнительную скидку на обучение
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱3🌚1
⚙️ Go-инструменты без хаоса в зависимостях

В версии Go 1.24 появилась новая функция для управления зависимостями инструментов разработки.

Теперь вы можете добавлять, обновлять и удалять такие инструменты, как staticcheck, govulncheck и другие, используя флаг -tool с командой go get.

Чтобы добавить инструмент, выполните команду:
go get -tool путь_к_пакету@версия


Например, для добавления stringer и govulncheck:
go get -tool golang.org/x/tools/cmd/stringer
go get -tool golang.org/x/vuln/cmd/govulncheck

После этого в файле go.mod появится секция tool, содержащая добавленные инструменты.

Запуск инструментов осуществляется через команду go tool:
go tool имя_инструмента [аргументы]


Для обновления инструмента до последней версии используйте:
go get -tool путь_к_пакету


➡️ Подробности в статье

🐸 Канал Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍216🎉2🌚2👾1
🎧 Новый выпуск подкаста о Go

В свежем выпуске подкаста Cup o' Go ведущие обсудили актуальные темы из мира Go и провели интервью с Карлосом Беккером.

Предстоящие обновления безопасности: анонсированы обновления для пакетов golang.org/x/oauth2 и golang.org/x/crypto, которые планируются на понедельник, 24 февраля.

Анализ рынка труда: обзор статьи Гергеля Ороса "State of the startup and scaleup hiring markets", где рассматриваются текущие тенденции найма в стартапах и растущих компаниях.

Тестирование конкурентного кода: обсуждение блога Дэмиена Нила "Testing concurrent code with testing/synctest", посвященного методам тестирования конкурентных программ в Go.

Предложения по улучшению: рассмотрение возможного принятия предложения о поддержке контентной неготации в пакете net/http.

Интересные проекты: упоминание проектов "Minecraft from scratch" и "MyNav" в рамках короткого обзора.

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика #подкаст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
⚔️ Поздравляем защитников Go-разработки:

▪️ горутины — элитный спецназ параллельного выполнения. Бросаешь в бой тысячи бойцов одной командой go.

▪️ встроенный форматтер — безжалостный диктатор стиля кода. Забудь свой любимый отступ в 2 пробела.

▪️ panic/recover — группа быстрого реагирования. Когда всё летит в тартарары, они тут как тут.

Признавайтесь, кто ваш любимый защитник кода? 👇
👍26😢10🌚9😁5🤔1
Документация PostgreSQL — лучший источник знаний о СУБД. Но она отличается огромным объемом: не каждый разработчик осилит 3024 страницы формата А4.

Опытный бэкендер составил список самых важных сведений, которые ему самому хотелось бы знать перед началом работы с PostgreSQL. Эта подборка сэкономит вам несколько недель изучения документации, и скорее всего, пригодится для работы с другими СУБД.

👉 Список самого важного
🥱9🔥51
🌐 Как ускорить API

#инфографика про основные методы улучшения производительности API

💬 Какой из методов вы уже используете? Делитесь в комментариях! 👇

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1👾1