🎧 Подкаст Cup o' Go #100 — вечеринка в честь релиза Go 1.24
Обсудили ключевые изменения в Go 1.24, работу с SQL NULL и компиляцию shell-скриптов в бинарники.
Не обошлось без докладов с GopherCon и новостей об окончании поддержки Go 1.14-1.19.
🖇 Слушать обсуждение новостей
🐸 Библиотека Go разработчика #подкаст
Обсудили ключевые изменения в Go 1.24, работу с SQL NULL и компиляцию shell-скриптов в бинарники.
Не обошлось без докладов с GopherCon и новостей об окончании поддержки Go 1.14-1.19.
🖇 Слушать обсуждение новостей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Forwarded from Proglib.academy | IT-курсы
Многие говорят о лидерстве, коммуникации и умении презентовать себя. Но будущее требует других навыков. Разбираем неочевидные soft skills, которые помогут прокачаться в IT и за рубежом.
▪️ Эмоциональный интеллект
▪️ Умение упрощать
▪️ Антихрупкость
▪️ Мультикультурность
▪️ Предпринимательское мышление
Эти навыки решают. Кто хочет оставаться в топе — развиваемся уже сейчас.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱5❤2👍2🔥1
🏭 WebAssembly: новые возможности в Go 1.24
Go 1.24 добавляет директиву
Теперь можно создавать WASI-реакторы для многократных вызовов без переинициализации — идеально для долгоживущих WASM-приложений.
➡️ Подробнее на go.dev
🐸 Библиотека Go разработчика
Go 1.24 добавляет директиву
go:wasmexport
, упрощая экспорт функций в WebAssembly и улучшая взаимодействие с WASI. Теперь можно создавать WASI-реакторы для многократных вызовов без переинициализации — идеально для долгоживущих WASM-приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤3
🔠 Погружение в UTF-8
Раньше ASCII поддерживал только 128 символов. UTF-8 решил эту проблему, используя 1–4 байта для кодирования символов Unicode. Go, ориентированный на современные веб-приложения, встроил поддержку UTF-8 на базовом уровне.
➖ Работа с UTF-8 в Go:
В Go строки — это срезы байтов. Это значит, что функция
Результат покажет, что
➖ Ошибки и подводные камни:
Одна из распространённых ошибок — неверное предположение, что каждый символ занимает 1 байт. При обрезке строк или подсчёте символов важно использовать utf8-функции.
Также стоит помнить о валидации. Функция
📎 Подробнее про UTF-8 в Go
🐸 Библиотека Go разработчика
Раньше ASCII поддерживал только 128 символов. UTF-8 решил эту проблему, используя 1–4 байта для кодирования символов Unicode. Go, ориентированный на современные веб-приложения, встроил поддержку UTF-8 на базовом уровне.
В 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤3
TCP обеспечивает передачу данных без потерь — идеальный выбор для чата. В Go есть встроенный пакет net, который работает с TCP-соединениями.
Основные шаги:
net.Listen()
для ожидания подключений.TCP-чат на Go — отличный проект, чтобы понять сетевое программирование, горутины и каналы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7🥱6
Многоточие (
...
) в 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)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥4❤2😁1👾1
🔐 Google OAuth 2.0 в Go и React.js
OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.
➖ Настройка Google Cloud:
Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.
➖ Бэкенд на Go:
Используйте пакет
Настройте маршруты: /login, /callback, /logout.
Храните access_token и refresh_token в httpOnly cookies.
Пример:
➖ Фронтенд на React:
Создайте AuthProvider с контекстом.
Настройте Axios-интерцепторы для обновления токенов:
➖ Ошибки и нюансы:
• Используйте httpOnly cookies для безопасности.
• Не храните client_secret на фронтенде.
• Обновляйте токены до их истечения, чтобы избежать разлогина пользователей.
📎 Подробный гайд с кодом
🐸 Канал Go-разработчика
OAuth 2.0 — популярный протокол аутентификации, который позволяет безопасно работать с аккаунтами Google. Сейчас разберём как настроить проект с его использованием.
Создайте OAuth-клиент в Google Cloud Console. Сохраните client_id и client_secret.
Используйте пакет
golang.org/x/oauth2
.Настройте маршруты: /login, /callback, /logout.
Храните access_token и refresh_token в httpOnly cookies.
Пример:
conf := &oauth2.Config{ClientID: "...", RedirectURL: "..."}
url := conf.AuthCodeURL("state")
Создайте AuthProvider с контекстом.
Настройте Axios-интерцепторы для обновления токенов:
axios.interceptors.response.use(resp => resp, async error => { ... });
• Используйте httpOnly cookies для безопасности.
• Не храните client_secret на фронтенде.
• Обновляйте токены до их истечения, чтобы избежать разлогина пользователей.
📎 Подробный гайд с кодом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3👏2
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👍4
Starskey – это key-value хранилище, написанное на Go. Оно основано на концепции LSM-дерева (log-structured merge tree).
Преимущества:
Пример:
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-баз.
Please open Telegram to view this post
VIEW IN TELEGRAM
👾10👍3
🎮 Minecraft на Go
Мы нашли полноценную игру в стиле Minecraft, написанную на Go с OpenGL.
Этот проект – пример чистого кода и глубокого понимания 3D-графики, физики и генерации мира.
➖ Как запустить
1. Склонируйте репозиторий
2. Запустите
Это не просто игра, а учебный материал для тех, кто хочет изучить разработку 3D-игр без движков.
➡️ Репозиторий проекта на GitHub
🐸 Канал Go-разработчика
Мы нашли полноценную игру в стиле Minecraft, написанную на Go с OpenGL.
Этот проект – пример чистого кода и глубокого понимания 3D-графики, физики и генерации мира.
1. Склонируйте репозиторий
git clone https://github.com/GianlucaP106/minecraft && cd minecraft
2. Запустите
go run .
Это не просто игра, а учебный материал для тех, кто хочет изучить разработку 3D-игр без движков.
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, он автоматически станет быстрее, потому что внешне ничего не поменялось.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥12❤3
👉👈 Алгоритм двух указателей
Алгоритм двух указателей – это метод оптимизированного перебора данных с использованием двух индексов, которые двигаются навстречу друг другу, в одном направлении или с разной скоростью.
Как это работает
1️⃣ Два указателя устанавливаются в разные точки структуры данных (например, на начало и конец массива).
2️⃣ Они перемещаются в зависимости от условий задачи, например:
• Навстречу друг другу — для поиска пар, например, в задачах на сумму двух чисел.
• В одном направлении, но с разной скоростью — для удаления дубликатов или поиска подстроки.
3️⃣ Процесс продолжается, пока указатели не пересекутся или не выполнится нужное условие.
Виды двух указателей
➡️ Два указателя навстречу друг другу
Пример: Проверка, является ли строка палиндромом.
1. Один указатель (i) начинает с начала, другой (j) – с конца строки.
2. Если s[i] == s[j], двигаем оба указателя к центру.
3. Если где-то символы не совпадают – это не палиндром.
➡️ Два указателя в одном направлении
Пример: Удаление дубликатов из отсортированного массива.
1. Один указатель (i) двигается по массиву, второй (j) отслеживает уникальные элементы.
2. Если встречаем новый элемент, перемещаем его вперед.
➡️ Быстрый и медленный указатели
Пример: Нахождение цикла в связном списке (алгоритм Флойда).
1. Медленный указатель движется по одному шагу, быстрый на два шага.
2. Если fast догоняет slow, значит, есть цикл.
3. Если fast достиг конца (nil), цикла нет.
Алгоритм двух указателей – это оптимальный способ обработки массивов и списков, уменьшая сложность O(N²) → O(N).
🐸 Канал Go-разработчика
Алгоритм двух указателей – это метод оптимизированного перебора данных с использованием двух индексов, которые двигаются навстречу друг другу, в одном направлении или с разной скоростью.
Как это работает
• Навстречу друг другу — для поиска пар, например, в задачах на сумму двух чисел.
• В одном направлении, но с разной скоростью — для удаления дубликатов или поиска подстроки.
Виды двух указателей
Пример: Проверка, является ли строка палиндромом.
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).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥11❤3🤔1🤩1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁44👍2🔥2🌚1
Проверьте свои знания, ответив на 8 вопросов – https://proglib.io/w/7af8c5cc
🧐 Кому подойдет?
Разработчикам, которые знают любой объектно-ориентированный язык программирования и хотят углубиться в архитектурные паттерны.
🎮 Как проходит обучение?
В течение всего интенсива вы будете создавать игру «Звездные войны» и применять ключевые архитектурные паттерны. В процессе изучите:
– Как строить гибкую архитектуру, которая не замедляет разработку
– Как применять IoC-контейнеры и писать модульные тесты
– Как использовать SOLID за пределами ООП
– Как внедрять CI/CD и снижать технический долг
👉 Подробная программа обучения
А по промокоду
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱3🌚1
В версии 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 путь_к_пакету
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤6🎉2🌚2👾1
🍋 Запоздалый #самыйсок за январь
Собрали для вас самые интересные статьи за прошедший месяц!
💡 Хотите порешать задачи?
📝 NoCopy Convention в Go: оптимизация работы с памятью
👨💻 Почему Go-разработчикам полезны тренировки на LeetCode (и почему нет)
🔄 Обновление Revive
🐸 Библиотека Go разработчика
Собрали для вас самые интересные статьи за прошедший месяц!
💡 Хотите порешать задачи?
📝 NoCopy Convention в Go: оптимизация работы с памятью
🔄 Обновление Revive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👾1
🎧 Новый выпуск подкаста о Go
В свежем выпуске подкаста Cup o' Go ведущие обсудили актуальные темы из мира Go и провели интервью с Карлосом Беккером.
➖ Предстоящие обновления безопасности: анонсированы обновления для пакетов
➖ Анализ рынка труда: обзор статьи Гергеля Ороса "State of the startup and scaleup hiring markets", где рассматриваются текущие тенденции найма в стартапах и растущих компаниях.
➖ Тестирование конкурентного кода: обсуждение блога Дэмиена Нила "Testing concurrent code with testing/synctest", посвященного методам тестирования конкурентных программ в Go.
➖ Предложения по улучшению: рассмотрение возможного принятия предложения о поддержке контентной неготации в пакете net/http.
➖ Интересные проекты: упоминание проектов "Minecraft from scratch" и "MyNav" в рамках короткого обзора.
🖇 Слушать обсуждение новостей
🐸 Библиотека Go разработчика #подкаст
В свежем выпуске подкаста Cup o' Go ведущие обсудили актуальные темы из мира Go и провели интервью с Карлосом Беккером.
golang.org/x/oauth2
и golang.org/x/crypto
, которые планируются на понедельник, 24 февраля.🖇 Слушать обсуждение новостей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
⚔️ Поздравляем защитников Go-разработки:
▪️ горутины — элитный спецназ параллельного выполнения. Бросаешь в бой тысячи бойцов одной командой go.
▪️ встроенный форматтер — безжалостный диктатор стиля кода. Забудь свой любимый отступ в 2 пробела.
▪️ panic/recover — группа быстрого реагирования. Когда всё летит в тартарары, они тут как тут.
Признавайтесь, кто ваш любимый защитник кода? 👇
▪️ горутины — элитный спецназ параллельного выполнения. Бросаешь в бой тысячи бойцов одной командой go.
▪️ встроенный форматтер — безжалостный диктатор стиля кода. Забудь свой любимый отступ в 2 пробела.
▪️ panic/recover — группа быстрого реагирования. Когда всё летит в тартарары, они тут как тут.
Признавайтесь, кто ваш любимый защитник кода? 👇
👍26😢10🌚9😁5🤔1
Forwarded from Библиотека C/C++ разработчика | cpp, boost, qt
Документация PostgreSQL — лучший источник знаний о СУБД. Но она отличается огромным объемом: не каждый разработчик осилит 3024 страницы формата А4.
Опытный бэкендер составил список самых важных сведений, которые ему самому хотелось бы знать перед началом работы с PostgreSQL. Эта подборка сэкономит вам несколько недель изучения документации, и скорее всего, пригодится для работы с другими СУБД.
👉 Список самого важного
Опытный бэкендер составил список самых важных сведений, которые ему самому хотелось бы знать перед началом работы с PostgreSQL. Эта подборка сэкономит вам несколько недель изучения документации, и скорее всего, пригодится для работы с другими СУБД.
👉 Список самого важного
🥱9🔥5❤1
🌐 Как ускорить API
#инфографика про основные методы улучшения производительности API
💬 Какой из методов вы уже используете? Делитесь в комментариях! 👇
🐸 Библиотека Go разработчика
#инфографика про основные методы улучшения производительности API
💬 Какой из методов вы уже используете? Делитесь в комментариях! 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1🔥1👾1