Go tests
7.7K subscribers
304 photos
1 video
100 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥полезные ит-каналы

https://t.iss.one/Golang_google - Golang программирование

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golang_jobsgo - go chat jobs
Download Telegram
👍4
Выведется ли текст в две строки
Anonymous Quiz
36%
Да
56%
Нет
3%
Наверное
5%
Узнать результаты
👍62🔥1
👣 Как освоить конкурентность в Go без десятков книг и курсов

Многие разработчики начинают с горутин и каналов, но быстро теряются: когда стоит использовать WaitGroup, а когда select? Как правильно закрывать каналы и избегать утечек горутин?

Ответы есть — в бесплатном онлайн-руководстве Go 101, которое разбирает конкурентность в Go максимально чётко и практично.
Вот ключевые главы, которые стоит пройти по порядку:

Goroutines: как Go управляет потоками, стеком и планировщиком
👉 go101.org/article/control-flows-more.html

Channels: основы синхронизации между горутинами и передача данных без блокировок
👉 go101.org/article/channel.html

Channel use cases: шаблоны, ошибки и приёмы для реальных задач — от worker pool до fan-in/fan-out
👉 go101.org/article/channel-use-cases.html

Synchronization overview: обзор всех инструментов — мьютексы, атомики, условия и таймеры
👉 go101.org/article/concurrent-synchronization-overview.html

После этих четырёх статей вы поймёте, почему конкурентность в Go - это не просто «многопоточность», а архитектурная философия языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2👍1
Всё, что волнует Go-сообщество: 1 ноября пройдет Я.Субботник по Go.

На круглых столах обсудим самые актуальные и спорные темы — использование AI-инструментов, highload и, конечно, заглянем в будущее языка.

Старший разработчик Яндекс Маркета Александр Никитин поделится опытом трассировки логики с помощью Debug Tree. СТО Яндекс Игр Степан Пестерникова разберёт использование K-V хранилищ и кэшей. А разработчик бэкенда Плюса и Финтеха Игорь Панасюк расскажет о новом garbage collector в Go 1.25 и о том, какие подходы применяются в управлении памятью.

Для тех, кто не сможет посетить митап в Москве, будет доступна онлайн-трансляция.

Регистрируемся
3👍2🔥2🤬1
🧩 Go Квиз: оцените отношение времени g()/f()
#Golang

Идея проста: какая из функций будет «дороже» и во сколько раз?


const N = 1 << 12

func f(){
for a, i := [N]int{}, 0; i < len(a); i++ {
a[i] = i * i * i * i
}
}

func doNothing(a []int) {}

func g(){
for a, i := [N]int{}, 0; i < len(a); i++ {
doNothing(a[:])
}
}


- f делает три умножения на итерацию плюс запись в массив. Это «дешёвая» арифметика с линейным проходом по памяти.

- g на каждой итерации создаёт срез a[:] и вызывает doNothing. Если компилятор встраивает пустую функцию и выкидывает бесполезный срез, тело цикла почти исчезает. Если запретить инлайнинг, вы получите N вызовов функции и накладные расходы на создание среза на каждой итерации.

Чего ожидать?

С инлайнингом и DCE: g() часто быстрее f(), потому что почти ничего не делает, тогда как f() реально пишет в память. Отношение g()/f() < 1.

Без инлайнинга: g() резко замедляется из-за стоимости вызова функции и построения среза на каждой итерации. Отношение g()/f() ≫ 1, иногда на порядок.

Вывод: результат зависит от оптимизаций компилятора. «Смысл» цикла, который не производит наблюдаемых эффектов, Go охотно выкидывает.

Как проверить у себя


Копировать код
# обычный режим
go test -bench . -benchmem

# отключить инлайнинг -l, чтобы увидеть цену вызова функции
go test -gcflags='-l' -bench . -benchmem


Что запомнить

- Микробенчи в Go чувствительны к инлайнингу и dead-code elimination.
- Запись в память удерживает цикл «реальным», тогда как пустые вызовы и срезы могут исчезнуть.
- Измеряйте обе конфигурации: с оптимизациями и без, чтобы понять истинную стоимость.

Если коротко
:

- В реальном билде с оптимизациями g()/f() обычно < 1.
- С запретом инлайнинга g()/f() обычно ≫ 1 из-за накладных расходов вызова.
2👍2🔥1
Какой тип будет иметь value при переборе строки с помощью for range
Anonymous Quiz
28%
byte
61%
rune
6%
int
5%
string
Что не так с этим кодом на Go? И чего вы ожидаете на выходе?


package main

func main() {
const (
iota = iota
Y
)
println(Y)
}



На первый взгляд - всё понятно. Но на самом деле это ловушка 😏


Вы переопределяете iota как обычную константу, равную самой себе (iota = iota). С этого момента iota перестаёт быть магической переменной, и счётчик сбрасывается.
Поэтому Y получает значение 0, а не 1 — как многие ожидают.

Вывод программы: 0

💡 Мораль: никогда не переназначайте iota внутри const, иначе потеряете её «магию».

Запустить код: https://go.dev/play/p/7xu1qRUcp2O
👍61🔥1😢1
👣 Что выведет код ?



package main

import (
"encoding/json"
"fmt"
"reflect"
)

type S struct {
A []int `json:"a"`
B []int `json:"b"`
}

func main() {
var a []int // nil
b := []int{} // пустой
fmt.Println(a == nil, len(a), cap(a)) // ?
fmt.Println(b == nil, len(b), cap(b)) // ?

fmt.Println(reflect.DeepEqual(a, b)) // ?

x := S{A: a, B: b}
d, _ := json.Marshal(x)
fmt.Println(string(d))
}


Ответ:
true 0 0
false 0 0
false
{"a":null,"b":[]}


👉 Запустить код: https://go.dev/play/p/PaqGcSwGqpV
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥43
Интенсив по очередям: Kafka & NATS

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

🌐 В программе курса:

▪️Асинхронное взаимодействие с помощью очередей: подходы, свойства, гарантии
▪️Какие бывают очереди, основные системы очередей, на какие свойства и требования смотреть при выборе
▪️Как конфигурировать и управлять системами очередей
▪️Архитектура Apache Kafka, streams, topics, конфигурации от минимального single instance до production grade кластера с отказоустойчивостью
▪️Архитектуры NATS, pub/sub, req/res, streaming, кластер, суперкластер, федерация, edge.

Всё в формате «живых» онлайн-сессий (лекции, брейнштормы, демо).

🥸 Кто мы: R&D-центр Devhands.io, наш канал. Автор курса — Владимир Перепелица, эксперт по большим проектам, очередям и Tarantool, Solution Architect в Exness, создатель S3 в VK Cloud, регулярный спикер и член ПК конференций Highload. 

🗓 Старт курса 11 ноября. Изучить программу и записаться можно здесь. 

Ждём вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqwff6PR
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вызвать встроенный race detector при запуске Go-программы
Anonymous Quiz
39%
go run -race
7%
go build -race
24%
go test -race
30%
Все варианты верны
This media is not supported in your browser
VIEW IN TELEGRAM
Параллелизм — одно из главных преимуществ Go, но без понимания горутин и каналов код быстро превращается в хаос. Если вы хотите наконец разобраться, как работает многопоточность “по-гошному” — добро пожаловать на открытый урок OTUS.

📗На вебинаре вы узнаете, как запускать тысячи задач одновременно без перегрузки процессора, почему горутины дешевле потоков и как безопасно обмениваться данными через каналы. Разберём типичные ошибки новичков — утечки, блокировки и deadlock-и — и покажем, как их избегать.

❗️После урока вы поймёте базовую механику конкурентности в Go и сможете уверенно использовать её для создания быстрых и надёжных приложений.

 📆 10 ноября в 20:00 МСК. Открытый вебинар проходит в преддверии старта курса «Golang Developer. Basic». 

👉Регистрируйтесь и начните понимать Go не на уровне “синтаксиса”, а на уровне процессов: https://otus.pw/ikPV/?erid=2W5zFHEovM6

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.