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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
📎 Проверка наличия элемента в слайсе

С версии 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
👍235👾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
🌐 Похоже, что девопсов заменил ИИ

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
😁23
🔍 Как проверить тип переменной в 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
👍15🥱3
🔥 Когда понимаешь SOLID — жизнь становится проще

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

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

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

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

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

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

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

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

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

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

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
✏️ 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
👍10👾41😢1🌚1
👨‍💻 Хвастайтесь своими машинками

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Представьте стопку тарелок. Положили одну, сверху ещё одну, потом ещё. Снимаете тарелки строго сверху — это и есть принцип работы стека. Последним пришёл — первым ушёл, то есть 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
🎓 Как вайб-кодинг меняет рынок IT-образования

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

➡️ Узнать как ИИ меняет обучение

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱22🌚43🤩2🤔1
🖇 Человекопонятные адреса для локальных серверов

Caddy — это реверс-прокси, который превращает ваши localhost:8081, localhost:9000 в красивые myapp.localhost, blog.localhost.

Предположим, у вас есть локальный сервер на порту 9000. После установки Caddy выполните всего одну команду:
caddy reverse-proxy --from myserver.localhost --to :9000


Теперь ваш сервер доступен по адресу https://myserver.localhost. Бонус: Caddy автоматически предоставляет локальные TLS-сертификаты

Также можно создать Caddyfile с конфигурацией:
myapp.localhost {
reverse_proxy :9000
}

myhugoblog.localhost {
reverse_proxy :1313
}


Пусть все ваши проекты будут доступны по человекопонятным адресам вместо путаницы с портами.

➡️ Репозиторий Caddy

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍192