Golang вопросы собеседований
@notxxx1 - админ @Golang_google - Golang для разработчиков @itchannels_telegram - 🔥лучшие из ит @golangl - chat @golangtests - golang tests @golang_jobsgo - go chat jobs @ai_machinelearning_big_data - AI @data_analysis_ml РКН: clck.ru/3FmtKd
Show more📈 Analytical overview of Telegram channel Golang вопросы собеседований
Channel Golang вопросы собеседований (@golang_interview) in the Russian language segment is an active participant. Currently, the community unites 14 931 subscribers, ranking 8 640 in the Technologies & Applications category and 44 584 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 14 931 subscribers.
According to the latest data from 30 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 11 over the last 30 days and by 1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 19.73%. Within the first 24 hours after publication, content typically collects 9.49% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 946 views. Within the first day, a publication typically gains 1 417 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 17.
- Thematic interests: Content is focused on key topics such as git, docker, github, контейнер, sql.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“@notxxx1 - админ
@Golang_google - Golang для разработчиков
@itchannels_telegram - 🔥лучшие из ит
@golangl - chat
@golangtests - golang tests
@golang_jobsgo - go chat jobs
@ai_machinelearning_big_data - AI
@data_analysis_ml
РКН: clck.ru/3Fmt...”
Thanks to the high frequency of updates (latest data received on 01 July, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Сервис Транспорта строит маршруты во всех продуктах 2ГИС, отображает пробки, дорожные события и автобусы на карте. Social сотворяет магию вокруг социального графа. Platform Backend Services превращает бизнес‑требования в платформенные сервисы: от идеи до запуска фич мобильными командами без лишних зависимостей. Web API решает все справочные задачи, управляет стилями карт и обратной связью от пользователей в продуктах. Сервис Рекламы создаёт техническую основу для продуктов рекламного направления. 2ГИС Логистика строит и пересчитывает маршруты с учётом пробок, погодных условий, типов транспорта, параметров груза и сложных логистических цепочек. ГеоПоток помогает бизнесу повышать прозрачность процессов и сокращать издержки.Все вакансии на сайте Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD
i & -i
Она находит младший установленный бит числа.
Именно это значение показывает, на сколько нужно прыгнуть по индексам внутри дерева.
Пример:
i = 12 // 1100
i & -i = 4 // 0100
В Go реализация выглядит так:
package main
type Fenwick struct {
tree []int
}
func NewFenwick(n int) *Fenwick {
return &Fenwick{
tree: make([]int, n+1),
}
}
func (f *Fenwick) Update(i, delta int) {
for i < len(f.tree) {
f.tree[i] += delta
i += i & -i
}
}
func (f *Fenwick) Query(i int) int {
sum := 0
for i > 0 {
sum += f.tree[i]
i -= i & -i
}
return sum
}
Как это работает:
* Update идёт вверх по структуре и обновляет все узлы, которые отвечают за индекс
* Query идёт вниз и собирает блоки, из которых состоит prefix sum
* i & -i каждый раз выбирает размер текущего блока
Главный нюанс: Fenwick Tree обычно использует 1-based indexing.
То есть первый элемент имеет индекс 1, а не 0.
Пример использования:
fw := NewFenwick(5)
fw.Update(1, 10)
fw.Update(2, 20)
fw.Update(3, 30)
println(fw.Query(3)) // 60
Красота Fenwick Tree в том, что дерево не хранится явно.
Нет указателей.
Нет рекурсии.
Нет сложной структуры узлов.
Только массив и один битовый трюк.
Дерево спрятано прямо внутри двоичного представления индексов.
func MapFromRecipeToToRecipe(source *from.Recipe) to.Recipe {
if source == nil {
return to.Recipe{}
}
var target to.Recipe
target.ID = to.RecipeID(source.RecipeId)
target.Name = source.Name
target.Servings = int(source.Servings)
return target
}
На одном маппере это терпимо. На десятках типов начинается боль: забытые поля, кривые конверсии, ручная синхронизация после каждого изменения схемы.
Morph генерирует такой код автоматически и умеет работать не только с простыми структурами.
Что поддерживает:
* structs и enums
* basic types, pointers, slices, arrays, maps
* nested structs
* concrete generic containers
* safe и настроенные type conversions
* вложенные сгенерированные мапперы
* пользовательские callables для сложной логики
* discovery готовых mapping-функций из указанных пакетов
* presets, чтобы не дублировать конфиг для типовых сценариев
Самый полезный случай - protobuf → idiomatic Go model. protoc часто генерирует не тот код, который хочется таскать по доменному слою: другие имена, другие типы, timestamp-обёртки, enum-формат, optional-поля. Morph позволяет описать правила один раз и дальше генерировать нормальные мапперы.
Запуск простой:
go install github.com/seeruk/morph/cmd/morph@latest
morph
Конфигурация живёт в morph.yaml, а сам инструмент можно использовать и как CLI, и как библиотеку внутри более сложных codegen-пайплайнов.
Хороший вариант для Go-проектов, где ручной mapping уже стал отдельным источником багов и мусорного кода.
GitHub:
https://github.com/seeruk/morph
#golangstrings.Index + slicing, ручной clamp через if, хелперы вроде newInt, старые циклы и куча мелочей, которые уже можно записать короче, безопаснее и понятнее.
Что появилось:
- go fix в Go 1.26 переписали и усилили анализаторами
- он умеет модернизировать код под новые возможности языка и стандартной библиотеки
- может заменять старые паттерны на min/max, strings.Cut, range по int и другие более чистые формы
- для Go 1.26 появился new(expr), который убирает кучу вспомогательных функций для указателей на значения
- часть таких подсказок уже попадает в gopls, то есть IDE может показывать их прямо во время работы
Пример, где это особенно приятно: раньше для optional-поля часто писали newInt(10) или ptr.To(10). В Go 1.26 можно проще:
Attempts: new(10)
Мелочь, но таких мелочей в большом Go-проекте сотни.
go fix теперь стоит запускать не один раз в жизни при миграции, а после обновления toolchain. Желательно из чистого git-состояния, чтобы ревью потом смотрело только автоматические изменения.
Zзык остаётся консервативным, но экосистема постепенно учится сама вычищать старые шаблоны и подтягивать проекты к более читаемому стилю.
#golang
https://altafino.com/blog/using-go-1-25-and-go-1-26-to-write-cleaner-more-maintainable-go-3ETksqLv07ShL2dFmF6LVndO8Psunable to get user: failed to query users table: connection refused
Когда плохо - в логах остаётся просто connection refused, и потом никто не понимает, где именно это произошло.
Проблема в том, что такой контекст надо постоянно поддерживать. Код меняется, старые сообщения устаревают, кто-то забывает завернуть ошибку, и история разваливается.
Автор предлагает практичный компромисс: добавлять stack trace в момент, когда приложение создаёт ошибку или впервые получает её от сторонней библиотеки. Тогда у команды всегда есть базовая точка опоры, а ручной контекст можно добавлять там, где он действительно нужен.
Хорошие ошибки в Go должны не просто сообщать, что всё упало. Они должны рассказывать, как именно оно к этому пришло.
https://robinsiep.com/blog/posts/go-errors/
#golang
package main
import (
"fmt"
"hash/fnv"
"math/bits"
)
const registersCount = 16
type HyperLogLog struct {
registers [registersCount]uint8
}
func hash64(s string) uint64 {
h := fnv.New64a()
_, _ = h.Write([]byte(s))
return h.Sum64()
}
func (hll *HyperLogLog) Add(value string) {
hash := hash64(value)
// первые 4 бита выбирают регистр: 2^4 = 16
index := hash >> 60
// остальные биты используем для поиска серии нулей
rest := hash << 4
// сколько нулей подряд в начале
zeros := uint8(bits.LeadingZeros64(rest) + 1)
if zeros > hll.registers[index] {
hll.registers[index] = zeros
}
}
func main() {
hll := HyperLogLog{}
values := []string{
"user_1",
"user_2",
"user_3",
"user_1",
"user_2",
"user_4",
"user_5",
}
for _, v := range values {
hll.Add(v)
}
fmt.Println(hll.registers)
}
Это не полноценный Redis HyperLogLog, а понятная учебная версия.
Что тут важно:
• дубликаты дают тот же хеш
• один и тот же хеш попадает в тот же регистр
• регистр хранит только максимум найденных нулей
• сами user_1, user_2, user_3 не сохраняются
• память остаётся почти постоянной
В Redis всё серьёзнее: там 16 384 регистра, аккуратная математика для оценки cardinality и поправки на маленькие и большие значения.O(n) при n = 16 и тёплом кэше может быть быстрее, чем O(1) с холодным cache miss.
Big O описывает асимптотический рост, а не реальную скорость на маленьких данных.matcha send без интерактивного интерфейса.
Для тех, кто любит терминал, Go и красивые TUI-приложения - проект точно стоит посмотреть.
https://github.com/floatpane/matcha
#golang
Available now! Telegram Research 2025 — the year's key insights 
