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 августа в Коломенском пройдет ИТ-Пикник.
В программе — выступления проекта 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 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 прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы.
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
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 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на 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ГИС, отображает пробки, дорожные события и автобусы на карте.
Social сотворяет магию вокруг социального графа.
Platform Backend Services превращает бизнес‑требования в платформенные сервисы: от идеи до запуска фич мобильными командами без лишних зависимостей.
Web API решает все справочные задачи, управляет стилями карт и обратной связью от пользователей в продуктах.
Сервис Рекламы создаёт техническую основу для продуктов рекламного направления.
2ГИС Логистика строит и пересчитывает маршруты с учётом пробок, погодных условий, типов транспорта, параметров груза и сложных логистических цепочек.
ГеоПоток помогает бизнесу повышать прозрачность процессов и сокращать издержки.
Все вакансии на сайте
Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD | 1 233 |
| 12 | ❓ Какая команда запустит тестирование всех пакетов проекта, если вы находитесь в корневой директории проекта | 2 062 |
| 13 | ⚙️ Лучшие практики в 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?
➡ Рассказали, как мы построили наймовый процесс, чтобы сделать его честнее для всех.
Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD | 1 391 |
| 16 | Что выведет код? | 2 372 |
| 17 | ⚡️ Вышло большое обновление популярного курса- 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
Яндекс проведет митап офлайн в Санкт-Петербурге и онлайн. Участников будут ждать практические доклады, живые кейсы и решения, проверенные под нагрузкой.
Руководитель группы разработки Городских сервисов Владимир Тельбухов покажет, как наладить консистентность в интеграциях с внешними сервисами. А разработчик Yandex Cloud Иван Похабов, расскажет, как устроен GoBGP, какие баги в нём встречаются и как их исправляют в production. Полную программу выступлений можно найти на сайте.
Помимо докладов, для участников проведут круглые столы, квиз по Go, а также экскурсию по питерскому офису Яндекса, для которой офлайн-участникам потребуется предварительная регистрация.
👉 Регистрируемся | 1 849 |
| 20 | ❓ В каком случае можно использовать пользовательские типы как ключи в мапе | 1 940 |
