fa
Feedback
Go tests

Go tests

رفتن به کانال در Telegram

По всем вопросам- @haarrp @itchannels_telegram - 🔥полезные ит-каналы https://t.me/Golang_google - Golang программирование @golangl - golang chat @GolangJobsit - golang channel jobs @golang_jobsgo - go chat jobs

نمایش بیشتر
7 819
مشترکین
+424 ساعت
+27 روز
-330 روز
جذب مشترکین
اوت '26
اوت '26
+94
در 0 کانال‌ها
ژوئیه '26
+143
در 0 کانال‌ها
Get PRO
ژوئن '26
+73
در 0 کانال‌ها
Get PRO
مه '26
+91
در 0 کانال‌ها
Get PRO
آوریل '26
+81
در 0 کانال‌ها
Get PRO
مارس '26
+120
در 0 کانال‌ها
Get PRO
فوریه '26
+133
در 0 کانال‌ها
Get PRO
ژانویه '26
+131
در 0 کانال‌ها
Get PRO
دسامبر '25
+124
در 0 کانال‌ها
Get PRO
نوامبر '25
+168
در 1 کانال‌ها
Get PRO
اکتبر '25
+112
در 0 کانال‌ها
Get PRO
سپتامبر '25
+280
در 1 کانال‌ها
Get PRO
اوت '25
+134
در 0 کانال‌ها
Get PRO
ژوئیه '25
+273
در 0 کانال‌ها
Get PRO
ژوئن '25
+146
در 0 کانال‌ها
Get PRO
مه '25
+118
در 0 کانال‌ها
Get PRO
آوریل '25
+161
در 1 کانال‌ها
Get PRO
مارس '25
+163
در 0 کانال‌ها
Get PRO
فوریه '25
+187
در 0 کانال‌ها
Get PRO
ژانویه '25
+258
در 0 کانال‌ها
Get PRO
دسامبر '24
+271
در 0 کانال‌ها
Get PRO
نوامبر '24
+282
در 0 کانال‌ها
Get PRO
اکتبر '24
+454
در 5 کانال‌ها
Get PRO
سپتامبر '24
+315
در 1 کانال‌ها
Get PRO
اوت '24
+314
در 0 کانال‌ها
Get PRO
ژوئیه '24
+272
در 0 کانال‌ها
Get PRO
ژوئن '24
+405
در 1 کانال‌ها
Get PRO
مه '24
+526
در 36 کانال‌ها
Get PRO
آوریل '24
+461
در 43 کانال‌ها
Get PRO
مارس '24
+514
در 20 کانال‌ها
Get PRO
فوریه '24
+351
در 1 کانال‌ها
Get PRO
ژانویه '24
+370
در 43 کانال‌ها
Get PRO
دسامبر '23
+370
در 39 کانال‌ها
Get PRO
نوامبر '23
+224
در 1 کانال‌ها
Get PRO
اکتبر '23
+148
در 0 کانال‌ها
Get PRO
سپتامبر '23
+257
در 0 کانال‌ها
Get PRO
اوت '23
+414
در 0 کانال‌ها
Get PRO
ژوئیه '23
+315
در 0 کانال‌ها
Get PRO
ژوئن '23
+377
در 0 کانال‌ها
Get PRO
مه '23
+63
در 0 کانال‌ها
Get PRO
آوریل '23
+34
در 0 کانال‌ها
Get PRO
مارس '23
+119
در 0 کانال‌ها
Get PRO
فوریه '23
+227
در 0 کانال‌ها
Get PRO
ژانویه '23
+76
در 0 کانال‌ها
Get PRO
دسامبر '22
+1 344
در 0 کانال‌ها
Get PRO
نوامبر '22
+41
در 0 کانال‌ها
Get PRO
اکتبر '22
+147
در 0 کانال‌ها
Get PRO
سپتامبر '22
+132
در 0 کانال‌ها
Get PRO
اوت '22
+528
در 0 کانال‌ها
Get PRO
ژوئیه '22
+282
در 0 کانال‌ها
Get PRO
ژوئن '22
+301
در 0 کانال‌ها
Get PRO
مه '22
+151
در 0 کانال‌ها
Get PRO
آوریل '22
+1 190
در 0 کانال‌ها
Get PRO
مارس '22
+900
در 0 کانال‌ها
Get PRO
فوریه '22
+1 230
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
27 اوت+6
26 اوت+5
25 اوت+5
24 اوت+6
23 اوت+2
22 اوت+5
21 اوت+4
20 اوت0
19 اوت+2
18 اوت+4
17 اوت+1
16 اوت+4
15 اوت+1
14 اوت+3
13 اوت+2
12 اوت+3
11 اوت+5
10 اوت+2
09 اوت0
08 اوت+1
07 اوت+11
06 اوت+2
05 اوت+3
04 اوت+3
03 اوت+6
02 اوت+4
01 اوت+4
پست‌های کانال
Go-задача: что выведет этот код?

package main

import "fmt"

func main() {
 var funcs []func()

 for i := range 3 {
  funcs = append(funcs, func() {
   fmt.Println(i)
  })
 }

 for _, f := range funcs {
  f()
 }
}
Что будет в выводе?

A)

0
0
0

😎

2
2
2

C)

0
1
2
D) Код не скомпилируется Правильный ответ: C — 0, 1, 2 Почему? В современных версиях Go переменная цикла для каждой итерации получает отдельное значение для замыканий. Плюс range теперь можно использовать прямо по integer: ```go for i := range 3 ``` Это даёт значения: ```go 0 1 2 ``` Поэтому каждое замыкание запоминает своё i. Несколько лет назад похожие примеры часто ломались из-за захвата одной общей переменной цикла, и разработчики писали: ```go i := i ``` внутри цикла. Хороший вопрос на собеседовании: Почему этот код сегодня выводит 0, 1, 2, хотя раньше похожий пример мог вести себя иначе?

2
## Задача Go 1.26, на которой легко ошибиться даже опытному разработчику Что выведет этот код? package main import "fmt" type Config struct { Timeout *int } func main() { a := Config{ Timeout: new(30), } b := a *b.Timeout = 60 c := Config{ Timeout: new(*a.Timeout), } *c.Timeout = 90 fmt.Println( *a.Timeout, *b.Timeout, *c.Timeout, ) } Попробуйте определить ответ до запуска. ```text 60 60 90 ``` Почему? ```go b := a ``` Структура копируется, но указатель внутри неё остаётся тем же. Поэтому `a.Timeout` и `b.Timeout` указывают на одну переменную: ```go *b.Timeout = 60 ``` Изменение видно через обе структуры. А здесь создаётся уже новая переменная: ```go Timeout: new(*a.Timeout) ``` Go сначала получает значение `60`, затем выделяет для него отдельную память. Поэтому изменение `c.Timeout` не влияет на `a` и `b`. ```text a ─┐ ├──► 60 b ─┘ c ─────► 90 ``` Это важный нюанс: копирование структуры с указателями, слайсами или map не создаёт глубокую копию данных. Синтаксис `new(30)` появился в **Go 1.26**. Раньше `new` принимал только тип, а теперь может сразу создать указатель на переданное значение. Код актуален для последней стабильной версии **Go 1.26.5**. #Golang #Go126 #Programming
1 621
3
Лето, ИТ-Пикник и музыка известных артистов уже через несколько дней! 8 августа в Коломенском пройдет ИТ-Пикник. В программе
Лето, ИТ-Пикник и музыка известных артистов уже через несколько дней! 8 августа в Коломенском пройдет ИТ-Пикник. В программе — выступления проекта LAB Антона Беляева, IOWA, Cream Soda, Pompeya, мартина и Совы. А днем — научпоп-лекции, дискуссии об ИИ и больших языковых моделях, мастер-классы и интерактивы. Полезные знакомства и развлечения тоже будут. Зарегистрироваться и узнать подробности можно на сайте мероприятия. В билет входит +1 — можно позвать близких и друзей. До встречи в месте притяжения ИТ.
1 370
4
🧠 Редкая задача для Go-разработчиков Версия: Go 1.23+ Именно в Go 1.23 появился range по функциям-итераторам и пакет iter. Нужно реализовать: func MergeSorted(a, b iter.Seq[int]) iter.Seq[int] Функция получает два ленивых отсортированных итератора и возвращает один общий поток в отсортированном порядке. Пример: a := Seq(1, 4, 7, 10) b := Seq(2, 3, 8, 9) for v := range MergeSorted(a, b) { fmt.Println(v) } Результат: 1 2 3 4 7 8 9 10 Но есть условия: * нельзя превращать входы в []int; * нельзя использовать горутины и каналы; * память должна быть O(1); * если внешний цикл сделал break, оба исходных итератора должны прекратить работу; * каждый элемент исходного iterator можно получить только один раз. 🔥 Дополнительный уровень: сделать generic-версию: func MergeSorted[T cmp.Ordered]( a, b iter.Seq[T], ) iter.Seq[T] На первый взгляд обычный merge. На практике придётся хорошо понять, как устроены push/pull iterators, `yield` и раннее завершение `range` в Go 1.23.
1 900
5
Каждый год в середине лета мы с друзьями собираемся на E-CODE. Ещё относительно молодая конфа Ozon Tech стала уже своего рода
Каждый год в середине лета мы с друзьями собираемся на E-CODE. Ещё относительно молодая конфа Ozon Tech стала уже своего рода легендой. Не удивительно: хардовость официальной части здесь не уступает громкости афтерпати. На E-CODE 2026 нас по части бэкэнда ждут: • Runtime Async с его + и – • трассировка с eBPF • ускорение на SIMD • построение кастомной real-time системы видеоаналитики • сравнительный анализ алгоритмов сборки мусора Фишка этого года — брейнринг разработчиков и ИИ. Эксперты разберут сложные кейсы и сравнят свои подходы с тем, что предложит машина. Победителя выберет зал. Регистрируйтесь сейчас, чтобы услышать это всё вживую: https://ecode.ozon.tech/ 12 и 13 сентября, Москва. До встречи на E-CODE!
1 514
6
В Go 1.26 появился типобезопасный errors.AsType, который ищет ошибку нужного типа внутри дерева обёрток. package main import ( "errors" "fmt" ) type CodeError struct { Code int } func (e *CodeError) Error() string { return fmt.Sprintf("code=%d", e.Code) } type MaskError struct { Value int } func (e MaskError) Error() string { return "masked" } func (e MaskError) As(target any) bool { dst, ok := target.(**CodeError) if !ok { return false } *dst = &CodeError{Code: e.Value} return true } func main() { err := errors.Join( fmt.Errorf("left: %w", MaskError{Value: 10}), errors.Join( &CodeError{Code: 20}, fmt.Errorf("right: %w", &CodeError{Code: 30}), ), ) result, ok := errors.AsType[*CodeError](err) fmt.Println(ok, result.Code) } Что будет выведено? true 10 Кажется, ответ должен быть 20: это первая настоящая ошибка типа *CodeError. Но errors.AsType обходит дерево в глубину, начиная с первой ветки. MaskError встречается раньше и через собственный метод As притворяется *CodeError, записывая значение с кодом 10. Поэтому дальнейший поиск прекращается. Cлучай, когда тип ошибки определяется не только её реальным типом, но и поведением метода As.
1 869
7
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку В IT прокачивается тот, кто каждый день видит сильные идеи, новые инс
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку В IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы. Окружение решает больше, чем кажется. Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре. AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: t.me/DevopsDocker Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_1001_notes Java: t.me/java_library JavaScript: t.me/javascriptv React: t.me/react_tg Frontend: t.me/front PHP: t.me/phpshka Android: t.me/android_its Мобильная разработка: t.me/mobdevelop Базы данных: t.me/sqlhub Data Science: t.me/data_analysis_ml Big Data: t.me/bigdatai Математика: t.me/data_math Физика: t.me/fizmat Kubernetes: t.me/kubernetc GameDev: https://t.me/gamedev Haskell: t.me/haskell_tg Собеседования и карьера: DS собеседования: t.me/machinelearning_interview Python собеседования: t.me/python_job_interview Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy Полезное сверху: ИТ-мемы: t.me/memes_prog Английский для программистов: t.me/english_forprogrammers ИИ и технологии: t.me/vistehno 954 ГБ open-source курсов: @courses ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy Max Ai: https://max.ru/ai_machinelearning_big_data Max python: https://max.ru/pythonl ТЕХНО: https://max.ru/vistehno Max Go: https://max.ru/Golang_google Max Linux: https://max.ru/linuxkalii Devops: https://max.ru/DevOPSitsec C#: https://max.ru/csharp_ci C++: https://max.ru/cpluspluc SQL: https://max.ru/sqlhub Java: https://max.ru/javatg Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд. Пока кто-то листает шум, ты будешь видеть инструменты, задачи и идеи, которые помогают расти в профессии.
1 435
8
👣 Go давно починил старую ловушку с замыканиями в цикле. Но concurrency всё ещё может кусаться. Что не так с этим кодом? package main import ( "fmt" "sync" ) func main() { nums := []int{1, 2, 3, 4} var wg sync.WaitGroup result := make([]int, 0, len(nums)) for i, n := range nums { wg.Go(func() { result = append(result, i*n) }) } wg.Wait() fmt.Println(result) } На первый взгляд всё нормально. i и n уже не общие для всех итераций. В современном Go каждая итерация получает свои переменные, поэтому старого бага с замыканием тут нет. Проблема в другом месте. `append` меняет slice header и может трогать общий backing array. Несколько горутин делают это одновременно. Значит, здесь data race, даже если loop variables теперь безопасные. Правильный вариант: ```go id="9f32ws" package main import ( "fmt" "sync" ) func main() { nums := []int{1, 2, 3, 4} var wg sync.WaitGroup result := make([]int, len(nums)) for i, n := range nums { wg.Go(func() { result[i] = i * n }) } wg.Wait() fmt.Println(result) } ``` Теперь каждая горутина пишет в свой индекс. Без mutex. Без channel. Без лишнего копирования переменных. Хороший тест на то, понимаешь ли ты Go после 1.22, а не просто помнишь старую страшилку про closures.
1 641
9
🔍Тестовое собеседование с Go Senior с опытом работы в Яндексе, EPAM и Uzum в этот четверг 16 июля(в четверг!) в 19:00 по мск
🔍Тестовое собеседование с Go Senior с опытом работы в Яндексе, EPAM и Uzum в этот четверг 16 июля(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика. Как это будет: 📂 Маруф Караев, Senior в европйской компании, ex-Uzum, ex-Яндекс, ex-EPAM будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Маруф будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Маруфу Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot Реклама. О рекламодателе.
830
10
👣 Golang-задача с подвохом Версия: Go 1.23+ Что выведет код? package main import "fmt" func numbers(yield func(int) bool) { defer fmt.Println("iterator: defer") for i := 0; i < 5; i++ { if !yield(i) { fmt.Println("iterator: stopped") return } fmt.Println("iterator: after yield", i) } } func main() { for n := range numbers { fmt.Println("main:", n) if n == 2 { break } } fmt.Println("main: done") } Многие ждут, что после break итератор просто мгновенно исчезнет. Но в Go 1.23 появился range по функции. Под капотом yield возвращает false, если внешний цикл остановился через break. Ответ: ```txt id="5glpxa" main: 0 iterator: after yield 0 main: 1 iterator: after yield 1 main: 2 iterator: stopped iterator: defer main: done ``` Подвох в том, что `break` происходит во внешнем цикле, но функция-итератор получает сигнал остановки через `yield`. Если не проверить `!yield(i)`, можно продолжить работу после того, как потребитель уже вышел из цикла.
2 040
11
Разрабатываете на Go больше четырёх лет? Сразу 7 наших команд ждут вас: Сервис Транспорта строит маршруты во всех продуктах 2
Разрабатываете на Go больше четырёх лет? Сразу 7 наших команд ждут вас: Сервис Транспорта строит маршруты во всех продуктах 2ГИС, отображает пробки, дорожные события и автобусы на карте. Social сотворяет магию вокруг социального графа. Platform Backend Services превращает бизнес‑требования в платформенные сервисы: от идеи до запуска фич мобильными командами без лишних зависимостей. Web API решает все справочные задачи, управляет стилями карт и обратной связью от пользователей в продуктах. Сервис Рекламы создаёт техническую основу для продуктов рекламного направления. 2ГИС Логистика строит и пересчитывает маршруты с учётом пробок, погодных условий, типов транспорта, параметров груза и сложных логистических цепочек. ГеоПоток помогает бизнесу повышать прозрачность процессов и сокращать издержки. Все вакансии на сайте Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD
1 233
12
❓ Какая команда запустит тестирование всех пакетов проекта, если вы находитесь в корневой директории проекта
2 062
13
⚙️ Лучшие практики в Go: кейсы, которые особенно ждём С 1 июня у нас стартует новый сезон Podlodka Go Crew — «Лучшие практики
⚙️ Лучшие практики в Go: кейсы, которые особенно ждём С 1 июня у нас стартует новый сезон Podlodka Go Crew — «Лучшие практики в Go». Он пройдёт при поддержке 2ГИС. Будем говорить о том, как писать код, который нормально живёт в продакшене при росте нагрузки и команды. Вот какие сессии в этом сезоне мы ждём с особенным вниманием: 🚀 «Практика Go оптимизаций: растем вместе с нагрузкой», Алексей Акулович — путь сервиса от прототипа до миллионов RPS, оптимизация CPU, grpc, protobuf и даже собственный GC поверх гошного. 🏗 «Эволюция структуры Go-проекта: как 30 человек пушат в один репозиторий», Кирилл Возжеников — про рост продуктового монорепозитория, построение системы и практики, которые помогают не утонуть в хаосе. 🧩 «Как и зачем писать свой CDC на Go», Юра Саргсян — о ситуации, где стандартных решений уже недостаточно. Postgres, Kafka, гарантии доставки и и подводные камни логической репликации. 🔥 А в конце сезона проведём битву кейсов «50 оттенков межсервисного взаимодействия» — вместе разберём архитектурные задачи с метриками, схемами и ограничением на уточняющие вопросы. 👨‍💻 Будет много живых инженерных кейсов и обсуждений без абстракций. Приходите — будем разбирать реальные задачи и подходы, которые помогают строить надёжные системы. 🎟 Билеты здесь: https://podlodka.io/gocrew
1 457
14
❓ Как объявить канал только для чтения в аргументе функции
1 821
15
Собираетесь к нам в Go? ➡ Рассказали, как мы построили наймовый процесс, чтобы сделать его честнее для всех. Другие инженерны
Собираетесь к нам в Go? ➡ Рассказали, как мы построили наймовый процесс, чтобы сделать его честнее для всех. Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD
1 391
16
Что выведет код?
Что выведет код?
2 372
17
⚡️ Вышло большое обновление популярного курса- Ai AI агенты, которые реально работают в проде! Вы всё ещё пишете обёртки над
⚡️ Вышло большое обновление популярного курса- Ai AI агенты, которые реально работают в проде! Вы всё ещё пишете обёртки над ChatGPT и называете это «AI-продуктом»? Пока вы промптите - рынок переходит на агентные системы. Те, что принимают решения, ходят в API, работают с Postgres и Redis, управляют браузером через Playwright. И 90% таких систем ломаются между ноутбуком и продом. AI Agents Engineering - курс, который закрывает этот разрыв. LangGraph, AutoGen, Computer Use, LLMOps. 8 модулей, 120+ шагов - от архитектуры до деплоя в Docker. На выходе: реальный опыт на большой практической базе, а production-агент и навыки, за которые уже платят. 👉 48 часов действует скидка на курс 55 процентов: https://stepik.org/a/276971/
1 728
18
❓ За что отвечает поле New в структуре sync.Pool
1 941
19
Для тех, кто строит и масштабирует сервисы на Go: 25 апреля пройдет Я.Субботник по Go Яндекс проведет митап офлайн в Санкт-Пе
Для тех, кто строит и масштабирует сервисы на Go: 25 апреля пройдет Я.Субботник по Go Яндекс проведет митап офлайн в Санкт-Петербурге и онлайн. Участников будут ждать практические доклады, живые кейсы и решения, проверенные под нагрузкой. Руководитель группы разработки Городских сервисов Владимир Тельбухов покажет, как наладить консистентность в интеграциях с внешними сервисами. А разработчик Yandex Cloud Иван Похабов, расскажет, как устроен GoBGP, какие баги в нём встречаются и как их исправляют в production. Полную программу выступлений можно найти на сайте. Помимо докладов, для участников проведут круглые столы, квиз по Go, а также экскурсию по питерскому офису Яндекса, для которой офлайн-участникам потребуется предварительная регистрация. 👉 Регистрируемся
1 849
20
❓ В каком случае можно использовать пользовательские типы как ключи в мапе
1 940