Всем привет⚡️ Читая ваши фидбэки понял, что в канале аудитория абсолютно разная. Поэтому решил создать мини-опрос📊 чтобы в дальнейшем контент был максимально полезным и понятным для всех👨💻
Anonymous Poll
15%
Вкатывающийся - ничего не знаю о Go, но очень хочу узнать
11%
Начинающий - начал изучение Go и Backend
23%
Стажер - знаю базу разработки на Go, но нет опыта
17%
Junior - имею небольшой опыт работы в сфере Backend
34%
Middle/Senior - уверенно пишу, есть опыт работы в разных компаниях
Меня зовут Гелия – я опытный IT-рекрутер.
Что ты найдешь в этом канале:
Подписывайся
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
СТАЖИРОВКИ в IT и Digital | Как найти первую работу
● Вакансии и стажировки в IT и Digital;
● Тут ты узнаешь как найти работу в IT;
● Хочешь проф. резюме от IT-рекрутера? Напиши сюда @geliyaereshova;
● Тут ты узнаешь как найти работу в IT;
● Хочешь проф. резюме от IT-рекрутера? Напиши сюда @geliyaereshova;
Всем привет! Конспект по Mock-тестам готов🎆
В нем вы встретите:
🔘 Разбор теории по мокам с практическими примерами
🔘 Ответ на вопрос: "Зачем нужны моки?"
🔘 Реализацию Mock-теста с помощью библиотеки gomock на примере микросервиса, написанного в предыдущем конспекте, с объяснениями каждого поля
🔘 Разбор частых ошибок и объяснения как их избегать
❗️ Также, напоминаю, что помимо конспекта по Mock-тестам, есть возможность приобрести конспект по написанию первого микросервиса с нуля.
Оба конспекта можно приобрести, написав мне: @sQUARyss
В нем вы встретите:
Оба конспекта можно приобрести, написав мне: @sQUARyss
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1😁1
Go Level Up
‼️ Что выведет данный код? func printlnStrings(allStrings ...string) { for _, s := range allStrings { for i := 0; i < len(s); i++ { fmt.Print(string(s[i])) } fmt.Println(fmt.Sprintf(" %d", len(s))) } } func main() { eng := "Go Level…
Код выведет: Go Level Up 11 Ро левел ап 20
🧑🎓 Начнем с ответа на вопрос: "Почему не вывелось Го левел ап ❓ " - если мы вспомним теорию строк, то обратим внимание что грубо говоря строка это набор байтов. Логично, что в один байт впихнуть еще и русский язык не получится, там и так уже английские символы, цифры и базовые символы. Соответственно для кодировки русского языка нужно 2 байта‼️. НО! Так как мы итерируемся по строке поиндексно, то мы получаем каждый байт строки и в случае русского языка, где для каждого символа два байта, мы берем и выводим каждый байт отдельно. Ровно поэтому выводится не то, что мы ожидаем 👍
🔜 Теперь благодаря тому, что мы знаем, что символы русского языка хранятся в двух байтах, мы можем понять почему длина в два раза больше. Важно! В два раза больше весит каждый символ, не пробелы. Поэтому у нас не 11 и 22, а 11 и 20, потому что 9 символов + 2 пробела
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, коллеги! 👋
Собрал для вас вопросы для мок-интервью по Go – можно потренироваться перед реальными собеседованиями.
Зачем это нужно?
🟢 Определим ваш уровень – в каждой теме поймем на какой уровень у вас знания.
🟢 Найдём слабые места – например, выяснится, что с каналами всё ок, а вот с интерфейсами – не очень.
🟢 Разберём ошибки – не только технические, но и как подаёте себя (да, софт-скиллы очень важны).
🟢 Получите конкретный фидбэк – после созвона скажу, куда копать и что подтянуть.
Если хотите "протестировать" себя – пишите, назначим время. Будет полезно 🚀
Собрал для вас вопросы для мок-интервью по Go – можно потренироваться перед реальными собеседованиями.
Зачем это нужно?
Если хотите "протестировать" себя – пишите, назначим время. Будет полезно 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤2 2 1
Что выведет код?
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered:", r)
}
}()
defer fmt.Println("1")
defer fmt.Println("2")
panic("something went wrong")
}Код выведет: 2 1 Recovered: something went wrong.
🧑🎓 Начнем с defer — это ключевое слово, которое откладывает выполнение функции или команды до конца работы главной функции (в нашем случае это main). Более простым языком: всё, что попадает в defer, запускается только после выполнения всей функции, в которой он объявлен.
➡️ Теперь о порядке выполнения нескольких defer'ов. Коротко говоря, они выполняются в обратном порядке (LIFO — last in, first out 📥 ). Получается, первым выполняется defer с выводом "2", потом "1", и только потом recover.
Что касается recover — это некий спасатель от паники 🛡 , который при её возникновении отлавливает её и не даёт программе внезапно завершиться. Но это не все его преимущества: благодаря ему мы можем не только избежать паники, но и получить и обработать сообщение этой паники. Удобно? Очень 🎆
Что касается recover — это некий спасатель от паники
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Внимание, разделяю пост для двух групп: вкатывающихся и уже попробовавших го.
🔹 Для начинающих создаю ниже опрос, который поможет понять и подготовить вам наиболее удобный и эффективный материал на тему: "С чего начать изучение Golang".
❗️ Если у вас возникают трудности со стартом или в поиске информации, голосуйте!
❗️ Если у вас есть идеи/желания/боли, которые помогут улучшить качество и ориентированность материала, обязательно пишите! Ваше мнение очень важно!
🔹 Для тех, кто уже имеет базу в Go, и готов попрактиковаться в написании кода в реальном времени, спешу предложить созвониться и проверить ваши силы💪
Возможные темы для лайфкодинга:
🔘 Асинхронные задачи (на worker pool и его друзей)
🔘 Алгоритмы и структуры данных
🔘 SQL
🔘 Базовые задачи (строки, слайсы, мапы)
🔘 Задачи на интерфейсы и структуры (паттерны проектирования, и SOLID)
✏️ Если какие-то пункты (или все сразу) заинтересовали вас, обязательно пишите: @sQUARyss
🔹 Для начинающих создаю ниже опрос, который поможет понять и подготовить вам наиболее удобный и эффективный материал на тему: "С чего начать изучение Golang".
🔹 Для тех, кто уже имеет базу в Go, и готов попрактиковаться в написании кода в реальном времени, спешу предложить созвониться и проверить ваши силы
Возможные темы для лайфкодинга:
Please open Telegram to view this post
VIEW IN TELEGRAM
Формат материала на тему: "С чего начать изучение Golang"
Anonymous Poll
7%
Конспект с разбором базы Golang
27%
Топ самых частых ошибок начинающих (конспект с разбором)
7%
Конспект с ответами на ваши вопросы (соберу в канале)
13%
Созвон с ответами на ваши вопросы (соберу в канале+вытекающие ваши вопросы)
47%
Пошаговый гайд с ссылками на полезные материалы: "Что и где изучить начинающему на старте"
Всем привет‼️ Вспомнил один интересный инструмент, который иногда спрашивают на собеседования - strings.Builder👷 Поэтому решил сделать с ним задачку, чтобы стало нагляднее) Как вы думаете, кто быстрее конкатенирует одинаковое количество элементов?
const (
iterations = 1000000
addedChar = "g"
)
func concatWithPlus(n int) string {
var s string
for i := 0; i < n; i++ {
s += addedChar
}
return s
}
func concatWithBuilder(n int) string {
var sb strings.Builder
sb.Grow(n)
for i := 0; i < n; i++ {
sb.WriteString(addedChar)
}
return sb.String()
}
func main() {
// Замерим время для '+'
start := time.Now()
concatWithPlus(iterations)
elapsedPlus := time.Since(start)
// Замерим время для Builder
start = time.Now()
concatWithBuilder(iterations)
elapsedBuilder := time.Since(start)
fmt.Printf("Конкатенация с '+': %v\n", elapsedPlus)
fmt.Printf("Конкатенация с Builder: %v\n", elapsedBuilder)
}
Кто быстрее конкатенирует строки?
Anonymous Poll
75%
strings.Builder
7%
+
16%
Впервые слышу про Builder
2%
Примерно одинаково
Конечно же, быстрее strings.Builder
Как минимум, потому что иначе он был бы бессмысленным и я бы про него не рассказывал 🙂
Для тех кто руководствовался этой логикой, вы молодцы👍 А для тех кто руководствовался знаниями, вы еще бОльшие молодцы 🎆
Теперь ближе к делу. Почему быстрее? По сути дела при маленьких данных конкатенация обоими путями даст примерно одно и то же время❗️ , однако, когда мы переходим к большим данным и большому количеству слияний, тут Builder побеждает. Всё дело в самой логике, в случае "+" он берет две строки, создает новую строку (в большинстве случаев), копируя две старые и возвращая результат.
🔜 strings.Builder при этом является простой оберткой над обычным буфером байт (советую заглянуть в его реализацию, будет полезно), который можно пре-аллоцировать, то есть заранее выделить размер памяти, чтобы ее не пересоздавать. Как мы и сделали с помощью Grow(). Таким образом мы просто забиваем буффер, не думая о копировании и каких-либо усложнениях
🔗 Стоит заметить, что есть еще более быстрые варианты, просто про Builder ни раз слышал вопросы на собесах. На тему конкатенации и более глубокого сравнения, советую посмотреть пост https://habr.com/ru/articles/417479/ . Думаю будет интересно как начинающим (не стоит углубляться во все что пишет автор, только начальные вещи), так и более опытным
Как минимум, потому что иначе он был бы бессмысленным и я бы про него не рассказывал
Для тех кто руководствовался этой логикой, вы молодцы
Теперь ближе к делу. Почему быстрее? По сути дела при маленьких данных конкатенация обоими путями даст примерно одно и то же время
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Ускорение конкатенации строк в Go своими руками
Сегодня мы будем разгонять склеивание коротких строк в Go на 30%. Причём для этого нам не нужно будет модифицировать сам Go, всё это будет реализованно в виде сторонней библиотеки . Под катом вас...
Правильный ответ:
iota - идентификатор, позволяющий создать последовательные нетипизированные целочисленные константы
По-простому, это некий счет, который, при переходе к следующей константе, увеличивает значение на 1. Немного сложные определения и абстракции, поэтому лучше покажу примеры использования и синтаксиса:
iota - идентификатор, позволяющий создать последовательные нетипизированные целочисленные константы
По-простому, это некий счет, который, при переходе к следующей константе, увеличивает значение на 1. Немного сложные определения и абстракции, поэтому лучше покажу примеры использования и синтаксиса:
const (
zero = iota // 0
one // 1
two // 2
)
const (
three = iota + 3 // 3
four // 4
)
const (
// Удобная история для масок
ReadPermission = 1 << iota // 1 << 0 = 1 (00000001)
WritePermission // 1 << 1 = 2 (00000010)
ExecutePermission // 1 << 2 = 4 (00000100)
)
👍2 2❤1
Пока «Пошаговый гайд для начинающих» находится на этапе финальных разработок, напоминаю о уже готовых и проверенных работах, которые помогут перейти от основ к реальной коммерческой разработке:
💻 Конспект: «Пишем первый микросервис с нуля»:
🔘 Назначение и реализация слоев написанного микросервиса
🔘 Подводные камни межслойного взаимодействия
🔘 Ответы на наиболее интересные и актуальные вопросы
🔘 Наставления из личного опыта разработки и менторства
🔘 Ссылку на гитхаб репо с кодом
🧪 Конспект: «Mock-тестирование в Go»:
🔘 Разбор теории по мокам с практическими примерами
🔘 Ответ на вопрос: "Зачем нужны моки?"
🔘 Реализацию Mock-теста с помощью библиотеки gomock на примере микросервиса, написанного в предыдущем конспекте, с объяснениями каждого поля
🔘 Разбор частых ошибок и объяснения, как их избегать
💡 Если вы пропустили новости об этих материалах, смело пишите мне в личку, еще не поздно их опробовать!
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет! Немного асинхроники вам в ленту🎆
🔜 Недавно понадобилось написать простой асинхронный запуск функций с обработкой ошибки, и вспомнил о такой классной сущности как errGroup. Она достаточно мало освещается в лентах, но от этого ее удобство и лаконичность не уменьшается)
❓ Что же это? По сути это обертка, позволяющая забыть о sync.WaitGroup/Mutex и ручной обработке ошибок. Да, она подходит далеко не для всех асинхронных задач, но там, где ее можно заюзать, она позволяет избежать каких-то ошибок связанных с примитивами синхронизации (всё, что вы знаете из пакета sync), или с асинхронной логикой (особенно обработка ошибка), да и в целом значительно уменьшает количество кода.
🥱 Я понимаю насколько сложно читать длинные текста, поэтому ниже прикрепляю фото, на котором видно весь кайф errGroup. Безусловно пример для работы без errGroup мог бы быть попроще, но мне показался этот интереснее+те кто не встречал sync.Once глянете как он работает)
🔗 Для тех, кто не любит картинки кода: https://go.dev/play/p/K57Gt2zHETm
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
Go Playground - The Go Programming Language
👏3 3❤1
Наконец-то завершил "Пошаговый гайд для начинающих"✔️
Этот гайд — именно то, чего мне не хватало, когда я начинал свой путь в Go. Теперь делюсь с вами👍
Что внутри:
🎯 Список тем, с которых необходимо начать свой путь в Go
📚 Вопросы, на которые нужно заострить свое внимание при изучении
💡 Пояснение ошибок, которые делают начинающие при изучении той или иной темы
🔗 Полезные материалы - статьи и видео, которые помогут в изучении темы
Конспекты по этой и другим темам можно приобрести в чате: @sQUARyss
Этот гайд — именно то, чего мне не хватало, когда я начинал свой путь в Go. Теперь делюсь с вами
Что внутри:
🎯 Список тем, с которых необходимо начать свой путь в Go
📚 Вопросы, на которые нужно заострить свое внимание при изучении
💡 Пояснение ошибок, которые делают начинающие при изучении той или иной темы
🔗 Полезные материалы - статьи и видео, которые помогут в изучении темы
Конспекты по этой и другим темам можно приобрести в чате: @sQUARyss
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2 2❤1👍1 1