Для создания sync.Cond в Go требуется любой объект, реализующий интерфейс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🎲 Знаешь, что хуже всего на собесе?
Когда задают простой вопрос, а ты не можешь ответить.
🤔 Это ощущение, когда понимаешь:
От «я знаю...» до «сейчас объясню!» всего один курс.
✅ Алгоритмы и структуры данных — от Big O до задач криптографии.
✅ Python для разработчиков — пиши чистый и эффективный код.
✅ Архитектуры и шаблоны — строй системы, которые масштабируются.
✅ Основы IT — всё необходимое для входа в профессию.
Выбирай любой и забирай со скидкой 40% только до конца октября.
🔗 Выбрать курс
Когда задают простой вопрос, а ты не можешь ответить.
🤔 Это ощущение, когда понимаешь:
«Блин, я это знаю... вроде... сейчас...»
От «я знаю...» до «сейчас объясню!» всего один курс.
✅ Алгоритмы и структуры данных — от Big O до задач криптографии.
✅ Python для разработчиков — пиши чистый и эффективный код.
✅ Архитектуры и шаблоны — строй системы, которые масштабируются.
✅ Основы IT — всё необходимое для входа в профессию.
Выбирай любой и забирай со скидкой 40% только до конца октября.
🔗 Выбрать курс
Это структура, определённая как
Зачем она нужна
• Неэкспортируемую пустую структуру часто используют, чтобы обозначить, что тип
• Так как struct{} занимает
set := map[string]struct{}{}
set["apple"] = struct{}{}• Пустая структура идеальна для
done := make(chan struct{})
go func() {
// работа
done <- struct{}{}
}()
<-done• Если структура неэкспортируема, она не видна за пределами пакета — удобно для
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👾1
Стандартная библиотека —
math.Round(2.5) // 3
math.Round(2.4) // 2
math.Round(-2.5) // -3
math.Floor(2.7) // 2 — всегда вниз
math.Ceil(2.1) // 3 — всегда вверх
math.Trunc(2.9) // 2
math.Trunc(-2.9) // -2
Важный нюанс: эти функции возвращают
result := int(math.Round(2.5)) // 3
Округление до N знаков после запятой вручную:
func roundToDecimal(num float64, precision int) float64 {
shift := math.Pow(10, float64(precision))
return math.Round(num * shift) / shift
}
roundToDecimal(3.14159, 2) // 3.14Но здесь есть подвох с float64 — погрешность может накапливаться. Для финансов это не подходит.
Decimal библиотеки:
import "github.com/shopspring/decimal"
num := decimal.NewFromFloat(3.14159)
num.Round(2) // 3.14
num.RoundUp(2) // 3.15 — всегда вверх
num.RoundDown(2) // 3.14 — всегда вниз
num.RoundBank(2) // банковское округление
math/big для высокой точности:
num := new(big.Float).SetFloat64(3.14159)
rounded := new(big.Float)
// Устанавливаем точность и режим округления
rounded.SetPrec(53) // точность в битах
num.SetMode(big.ToNearestEven) // режим округления
Для финансов всегда
decimal с явным режимом округления. Для остального — math вполне достаточен.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾1
Жадный алгоритм — это когда мы принимаем решение, которое кажется лучшим
Пример. Задача о размене монет:
// Выдать сдачу 63 рубля монетами: 50, 10, 5, 2, 1
// Жадный подход: берем максимальную монету
func giveChange(amount int) []int {
coins := []int{50, 10, 5, 2, 1}
result := []int{}
for _, coin := range coins {
for amount >= coin {
result = append(result, coin)
amount -= coin
}
}
return result // [50, 10, 2, 1] - работает!
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Как ускорить браузер
Закрой все вкладки со словами «MacBook», «купить ноутбук», «ноут в рассрочку». Потому что у нас есть решение лучше.
🔥 Proglib разыгрывает MacBook Pro 14. Формула простая: покупаешь любой курс до 15 ноября → учишься 2 недели → пишешь куратору #розыгрыш
Пока у тебя открыто 147 вкладок с ценами, кто-то уже прокачивает скилы и может забрать приз.
👉🏻 Выбрать курс для участия
Закрой все вкладки со словами «MacBook», «купить ноутбук», «ноут в рассрочку». Потому что у нас есть решение лучше.
🔥 Proglib разыгрывает MacBook Pro 14. Формула простая: покупаешь любой курс до 15 ноября → учишься 2 недели → пишешь куратору #розыгрыш
Пока у тебя открыто 147 вкладок с ценами, кто-то уже прокачивает скилы и может забрать приз.
👉🏻 Выбрать курс для участия
🥱5
В Go
Внутри функции можно использовать оператор :=, если одновременно присутствует
a := 1 // a объявлена
a, b := 2, 3 // a присваивается новое значение, а b объявляется
Можно объявить переменную с одинаковым именем в разных областях видимости:
var a = 1
func test() {
var a = 2 // это другая переменная, локальная для функции
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤4👍2🥱1
atomic.Value используется для безопасного
Для записи используется метод Store, для чтения — Load. Хранящееся значение должно быть
atomic.Value синхронизирует само
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
⚡️ Механизм запущен, часики тикают
Прямо сейчас кто-то уже купил курс со скидкой 40%, открыл первый урок и уже на пути к MacBook Pro 14.
А ты всё ещё читаешь этот пост...
⏰ Дедлайны не ждут:
31 октября — скидка 40% сгорает
15 ноября — розыгрыш MacBook
🎯 Правила участия:
→ купить любой курс до 31 октября
→ отучиться 2 недели
→ написать #розыгрыш куратору
🕊️ Не упусти свой шанс
Прямо сейчас кто-то уже купил курс со скидкой 40%, открыл первый урок и уже на пути к MacBook Pro 14.
А ты всё ещё читаешь этот пост...
⏰ Дедлайны не ждут:
31 октября — скидка 40% сгорает
15 ноября — розыгрыш MacBook
🎯 Правила участия:
→ купить любой курс до 31 октября
→ отучиться 2 недели
→ написать #розыгрыш куратору
🕊️ Не упусти свой шанс
Если контекст, переданный горутине, отменён с помощью функции
cancel(), в горутине <-ctx.Done(). Когда горутина обнаружит, что
Сам по себе вызов
cancel() Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Go как ядро сложной dev-платформы? Да, и это SourceCraft! 🤯
Интересный факт для Go-комьюнити: ядром git-сервера SourceCraft стал переработанный Go-движок go-git. Команда Яндекса перенесла слой хранения в облако (Object Storage + PostgreSQL), добившись масштабируемости. И почти вся остальная бэкенд-обвязка платформы тоже написана на Go!
Получился редкий пример, где Go — не просто один из языков, а основа сложной инфраструктуры. Разработчики платформы говорят, что это даёт масштабирование без потери быстродействия. Можно залить крупный проект и проверить, как он грузится. 🤔
Интересный факт для Go-комьюнити: ядром git-сервера SourceCraft стал переработанный Go-движок go-git. Команда Яндекса перенесла слой хранения в облако (Object Storage + PostgreSQL), добившись масштабируемости. И почти вся остальная бэкенд-обвязка платформы тоже написана на Go!
Получился редкий пример, где Go — не просто один из языков, а основа сложной инфраструктуры. Разработчики платформы говорят, что это даёт масштабирование без потери быстродействия. Можно залить крупный проект и проверить, как он грузится. 🤔
👍3❤1🔥1👾1
Поля-структуры содержат
Поля-интерфейсы описывают набор методов
Типы в полях-структурах
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👾1
✨ Halloween Special — последний день магии! 👻
Успевай сегодня купить курсы со скидкой 40%!
А также участвуй в розыгрыше MacBook Pro 14 💻
После полуночи останется только тыква 🎃
🔮 Открой портал и выбери курс
Успевай сегодня купить курсы со скидкой 40%!
А также участвуй в розыгрыше MacBook Pro 14 💻
После полуночи останется только тыква 🎃
🔮 Открой портал и выбери курс
🌚1
⚙️ В микросервисах всё рушится не тогда, когда ломается код, а когда ломается конфигурация. Один неверный параметр — и вместо отказоустойчивости получаете каскадный сбой.
На открытом уроке вы узнаете, как централизованное управление настройками помогает системе оставаться живой, даже когда всё вокруг падает.
Разберём etcd, Zookeeper, Consul, а также практику автоматического обновления конфигураций без остановки сервисов.
❗️ Мы покажем, как микросервисы на Go могут адаптироваться к сбоям и изменениям в реальном времени, и какие паттерны делают архитектуру по-настоящему устойчивой.
📆 5 ноября в 20:00 МСК. Открытый вебинар проходит в преддверии старта курса «Микросервисы на Go».
➡️ Регистрируйтесь и разберитесь, как не дать своим сервисам “упасть” из-за одной строки в конфиге: https://clc.to/hFI13w
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
На открытом уроке вы узнаете, как централизованное управление настройками помогает системе оставаться живой, даже когда всё вокруг падает.
Разберём etcd, Zookeeper, Consul, а также практику автоматического обновления конфигураций без остановки сервисов.
❗️ Мы покажем, как микросервисы на Go могут адаптироваться к сбоям и изменениям в реальном времени, и какие паттерны делают архитектуру по-настоящему устойчивой.
📆 5 ноября в 20:00 МСК. Открытый вебинар проходит в преддверии старта курса «Микросервисы на Go».
➡️ Регистрируйтесь и разберитесь, как не дать своим сервисам “упасть” из-за одной строки в конфиге: https://clc.to/hFI13w
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👾1
Можно использовать тип данных
При конкурентных обращениях использовать
Если нужно сохранять пользователей в базе данных — использовать уникальные
При необходимости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🌚2
В Go аргументы функции, вызванной с помощью
defer, вычисляются Сам вызов функции с
defer будет выполнен Пример:
package main
import "fmt"
func main() {
x := 10
defer fmt.Println("До:", x) // x вычисляется сейчас, но вывод откладывается
x = 20
fmt.Println("После:", x)
}
Выведется 20 и 10, потому что значение x для
defer зафиксировалось при объявлении defer, а не к моменту выполнения отложенной функции.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Суть метода в свойствах XOR:
• Любое число XOR с самим собой дает
a⊕a = 0
a⊕a = 0.• Любое число XOR с нулем дает
a⊕0 = a
a⊕0 = a.• Операция XOR коммутативна и ассоциативна, то есть порядок операндов не важен.
Поэтому если последовательно применить XOR ко
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
Небуферизованный канал — строгий. Отправка и прием завершаются
Буферизованный канал хранит элементы в
При небуферизованном обмене с ожидающим получателем значение
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2
Канал с размером буфера 1 — это своего рода «промежуточный» вариант между небуферизованным и традиционно буферизованным каналом. Он позволяет одному элементу находиться в канале
Если буфер пуст, то отправитель записывает значение в буфер и
Если буфер заполнен этим одним элементом, дальнейшая отправка
Получатель, если буфер пуст, будет
Это часто используется для случаев, когда нужен небольшой буфер для
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1