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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Недавно мы анонсировали старт нового курса «Математика для Data Science».

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

Спикеры курса:

👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.

👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.

👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.

Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.

🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!

👉 Записаться на курс
2
⚙️ Разбираем код на атомы

Лексер (или лексический анализатор) — это первый этап обработки исходного кода. Он получает на вход строку символов и превращает её в последовательность токенов — элементарных единиц языка.

Если у вас есть код x = 42 + y, лексер разобьёт его примерно так:

• идентификатор x
• оператор =
• число 42
• оператор +
• идентификатор y

Зачем это нужно

Парсеру и компилятору работать с отдельными символами неудобно. Токены — это уже структурированные данные: каждый имеет тип (число, ключевое слово, оператор) и значение. С ними можно строить синтаксическое дерево и анализировать логику программы.

Как устроен лексер в Go

Базовая структура выглядит так:
type Token struct {
Type TokenType
Value string
}

type Lexer struct {
input string
pos int // текущая позиция
readPos int // следующая позиция
ch byte // текущий символ
}


Лексер движется по строке посимвольно. Метод readChar() сдвигает позицию, а NextToken() определяет тип очередного токена по первому символу.

Стандартная библиотека

В Go есть пакеты go/scanner и go/token для работы с самим языком Go. Они показывают профессиональную реализацию лексера: обработку Unicode, точные позиции в файле, все угловые случаи синтаксиса.
Если строите свой язык или парсите конфигурационный формат, можете вдохновиться их архитектурой.

Когда писать свой лексер

Для JSON или YAML проще взять готовые библиотеки. Но если вы разрабатываете DSL, шаблонизатор или интерпретатор учебного языка — лексер придётся написать самостоятельно.

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72
👨‍💻 Zed теперь доступен для Windows

Редактор кода Zed вышел в стабильной версии для Windows.

Zed использует DirectX 11 для рендеринга, а DirectWrite — для отрисовки текста. Это не очередной Electron-редактор, а нативное приложение, которое работает напрямую с системой.

Редактор полностью интегрирован с Windows Subsystem for Linux (WSL). Вы можете открыть папку в Zed прямо из WSL-терминала через команду zed.

Разработчики просят обратную связь по работе с WSL, поддержке IME и раскладок клавиатуры, настройке мультимониторных систем и дисплеев с частотой 120-144 Гц.

➡️ Попробовать Zed

Zed реально шустро работает на винде. Чтобы также проектировать приложения советуем пройти наш интенсив по архитектуре пока он со скидкой!

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🥱3
♾️ 17 формул, которые изменили мир

Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.

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

А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:

«Математика для Data Science»
— практика и живые уроки
— разбор кода и проверка домашних
— поддержка в Telegram-чате


🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября

👉 Записаться на курс
👍2
Сегодня последний день!

🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!

Успей попасть на экспресс-курс «Математика для Data Science»10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.

За 2 месяца разберёшься с тем, на чём держится Data Science:
• векторы, матрицы и регрессия;
• градиенты, оптимизация, вероятности и статистика;
• реальные задачи анализа данных;


🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.

👉 Записаться на курс

Старт — 6 ноября, не упусти бонус!🎁
😁21
📎 Проверка наличия элемента в слайсе

С версии Go 1.21 появился встроенный пакет slices с функцией для поиска элементов:
exists := slices.Contains(items, target)


Функция принимает слайс и искомое значение, возвращает true если элемент найден, false если нет. Работает с любыми сравнимыми типами.

Примеры:
numbers := []int{1, 2, 3, 4, 5}
hasThree := slices.Contains(numbers, 3) // true
hasTen := slices.Contains(numbers, 10) // false

tags := []string{"go", "python", "rust"}
hasGo := slices.Contains(tags, "go") // true


До Go 1.21 приходилось писать цикл вручную или использовать сторонние библиотеки. Но базу нужно знать, вдруг попадётся проект на старой версии? А подтянуть ту самую базу можно на нашем курсе по алгоритмам.

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍245👾1
👨‍💻 Вакансии для разрабов с опытом

Go-разработчик
— от 300 000 ₽ и удалёнка в Москве.

Помогут переехать в Казахстан или на Кипр Senior Backend Engineer'у

Tech Lead — солидные 400 000 ₽ и удалёнка.

➡️ Еще больше топовых вакансий — в нашем канале Go jobs

🐸 Библиотека Go-разработчика

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
🌐 Похоже, что девопсов заменил ИИ

15 октября упал YouTube. Google починили всё за два часа, но причину не назвали.

20 октября остановился Amazon Web Services на 15 часов. Вместе с AWS полегли Docker, Postman, Snapchat, Roblox, Duolingo, Reddit и десятки других сервисов. Проблема была в DNS — системе, которая переводит адреса сайтов в IP-адреса для компьютеров.

Админу пришлось использовать инсомнию вместо постмана несколько часов.

💬 Коснулись сбои вас? Пришлось адаптироваться или просто ждали, когда пожар потушат 👇

Чтобы ваши приложения не падали нужно строить надёжную инфраструктуру. В этом поможет наш интенсив по архитектуре. Успевайте до конца октября, ведь там скидка закончится!

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24
🔍 Как проверить тип переменной в Go во время выполнения

В Go есть несколько способов узнать тип переменной в рантайме. Разберём каждый подробно.

1️⃣ Type Assertion

Самый простой способ для проверки конкретного типа:
var i interface{} = "hello"

// Проверка с обработкой ошибки
s, ok := i.(string)
if ok {
fmt.Printf("Это строка: %s\n", s)
} else {
fmt.Println("Это не строка")
}


Когда использовать: когда нужно проверить один конкретный тип.

2️⃣ Type Switch

Элегантный способ для проверки нескольких типов:
func checkType(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Целое число: %d\n", v)
case string:
fmt.Printf("Строка: %s\n", v)
case bool:
fmt.Printf("Булево: %t\n", v)
default:
fmt.Printf("Неизвестный тип: %T\n", v)
}
}


Когда использовать: когда нужно обработать разные типы по-разному.

3️⃣ Пакет reflect

Для продвинутой работы с типами:
import "reflect"

var x float64 = 3.14

// Получить тип
t := reflect.TypeOf(x)
fmt.Println("Тип:", t) // float64

// Получить значение
v := reflect.ValueOf(x)
fmt.Println("Тип через Value:", v.Type())
fmt.Println("Kind:", v.Kind()) // float64


4️⃣ Форматирование %T

Быстрый способ для вывода типа:
var x = 42
fmt.Printf("Тип переменной: %T\n", x) // int


Когда использовать: для быстрой отладки.

Best practises:

• Избегайте reflect там, где можно обойтись type assertion или type switch

• Используйте type switch вместо цепочки type assertion

• Проверяйте ok при type assertion, чтобы избежать паники

• Предпочитайте интерфейсы вместо проверки конкретных типов

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🥱41
🔥 Когда понимаешь SOLID — жизнь становится проще

В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»

📘 На интенсиве ты:

— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».

👨‍💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.

Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.

📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.

Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.

👉 Переходи к курсам со скидкой 40%
🥱3👍21
14 вопросов, после которых вам не перезвонят

Разбираем 14 вопросов, которые лучше не задавать на собеседовании: что не так с каждым из них и как переформулировать, чтобы получить нужную информацию без риска для репутации.

➡️ Прочитать статью

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
✏️ Filter, Map и Reduce для слайсов

В Go нет встроенных функций для работы с коллекциями, которые есть в других языках. Хотите отфильтровать слайс или применить функцию к каждому элементу? Придется писать цикл вручную.

Библиотека pie решает эту проблему. Она добавляет привычные функции для работы со слайсами и мапами: Filter, Map, Reduce, Find и десятки других.

Примеры:
names := pie.FilterNot([]string{"Bob", "Sally", "John", "Jane"},
func(name string) bool {
return strings.HasPrefix(name, "J")
})
// ["Bob", "Sally"]

name := pie.Of([]string{"Bob", "Sally", "John", "Jane"}).
FilterNot(func(name string) bool {
return strings.HasPrefix(name, "J")
}).
Map(strings.ToUpper).
Last()
// "SALLY"



Для чейнинга есть три варианта обёрток, в зависимости от типа данных:

pie.Of — работает с любыми типами, но набор функций ограничен
pie.OfOrdered — для чисел и строк, функций больше
pie.OfNumeric — только числа, доступны все функции включая математические операции

Требует Go 1.18+ из-за дженериков. Если работаете на более старой версии, есть v1 библиотеки без дженериков.

➡️ Попробовать либу

Своё приложение или либа = опыт. А опыт просто так не получить, но мы поможем.

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👾51😢1🌚1
👨‍💻 Хвастайтесь своими машинками

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

Админ недавно взял себе RTX3060. Да, не самая новая железка, но зато какая гордость!

💬 Похвастайтесь какие у вас комплектующие в комментариях 👇

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱8👍61
🎧 Короткие новости Go

Иногда самые полезные вещи — самые короткие. Как команды Unix: ls, cd, rm — всё по делу, ничего лишнего. Недавний эпизод подкаста Cup o' Go взял этот принцип на вооружение и выдал порцию Go-новостей без воды.

➡️ Послушать подкаст

Кратко про наши курсы: скидки до конца октября!

🐸 Библиотека Go-разработчика

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1
💥 Октябрь — месяц апгрейда!

До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML для старта и математики).

Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».

👨‍💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.

👨‍🏫 Преподаватели — инженеры из Яндекса и ВШЭ.

🎓 Сертификат по итогам обучения — в портфолио.

47 видеоуроков и 150 практических задач;
поддержка преподавателей и чат;
доступ к материалам на 12 месяцев.

Полная программа курса тут 👈

👉 Остальные курсы
🥱2
🖥 Почему данные сбегают

Когда программа запускается, операционная система выделяет ей память. Но не всю сразу одной кучей — память организована в разные области, каждая со своим назначением. Две самые важные из них — стек и хип.

Стек: быстрый и дисциплинированный

Представьте стопку тарелок. Положили одну, сверху ещё одну, потом ещё. Снимаете тарелки строго сверху — это и есть принцип работы стека. Последним пришёл — первым ушёл, то есть LIFO.

В стеке хранятся локальные переменные функций и информация о вызовах. Когда вызываете функцию, для неё создаётся стековый фрейм — туда помещаются все её параметры и локальные переменные.

Хип: гибкий и непредсказуемый

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

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

Практический пример:
func createUser(name string) *User {
count := 42 // в стеке
user := &User{Name: name} // escape to heap
return user
}

func processData() {
data := make([]byte, 100) // скорее всего в стеке
// ... используем data только внутри функции
}


Переменная count останется в стеке и исчезнет при выходе из функции. Структура User уйдёт в хип, потому что мы возвращаем указатель на неё — компилятор видит, что данные сбегают из функции.

Слайс data может остаться в стеке, если компилятор убедится, что он не покидает функцию и его размер разумен.

Как Go решает, что куда положить

Go использует escape analysis во время компиляции. Компилятор анализирует код и решает, может ли переменная безопасно жить в стеке:
// Останется в стеке
func stackAlloc() {
x := 42
fmt.Println(x)
}

// Уйдёт в хип
func heapAlloc() *int {
x := 42
return &x // escape: возвращаем указатель
}


Можете проверить сами:
go build -gcflags="-m" your_file.go


Компилятор покажет, какие переменные сбегают в хип и почему.

В Go вы не управляете памятью вручную — компилятор и runtime делают это за вас. Но понимание разницы между стеком и хипом помогает писать эффективный код.

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15