0

Хочу изучить алгоритмы на языке Go - нужен совет


Привет всем!

Я недавно начал изучать язык Go (Golang). Сначала изучал самостоятельно, потом прошел бесплатные курсы, потом подумал, что может в платных курсах есть что-то более конкретное или углубленное, прошел полугодовой курс (платный). Не хочу указывать в статье что именно за курсы, что бы не было рекламой. По факту хочу сказать, что разница не особо большая - но было кое-что полезное - сроки, и хоть какой-то фидбек от преподавателя. Сейчас хочу попасть на стажировку (Авито/озон/т-банк/да в принципе хоть что-то). Не знаю - верный ли путь я намечаю или нет. Если в комментариях скажите что-то по этому поводу - будет хорошо.

Так вот, что бы попасть на стажировку - необходимо пройти алгособес. Вот тут у меня пробел. Хочу изучить как решать алгоритмические задачи на go. На python много материалов на эту тему в интернете, на других ЯП тоже хватает, но именно на Go я встречал только платные варианты.

Посоветуйте пожалуйста какие-нибудь бесплатные материалы (мне зашёл формат текстовый, видео - не очень, но если другого нет, то мне и это пойдет). Может какие-то книги, курсы. Хотелось бы именно подборкой цельной. Я нахожу разные статьи на Хабре, какие-то бесплатные обрезки курсов. В общем всё кусками. А хочется что-нибудь более структурированное и полное.

Раньше я немного сталкивался с алгоритмами на других языках, но хочется пройти весь путь именно на Go: от базовых сортировок и деревьев до более сложных задач типа графов, динамичес

Просьба к вам уважаемые гоферы с Пикабу:

Поделитесь пожалуйста информацией.

Буду благодарен за любые советы, ссылки и просто поддержку. Если есть желающие учиться вместе — тоже пишите в комменты или в ЛС!

Спасибо!

P.S. немного о себе - я с Иркутска (это для тех, кто может захочет объединить силы для совместного обучения, пишу для понимания часового пояса). Мне 32 года, есть основная работа, но чувствую, что необходимо менять, причин много, не буду расписывать. Почему именно IT? Потому как есть знакомые которые успешно перешли в эту сферу (предугадывая комменты - у них нет того, что мне нужно), немаловажно - зарплаты, плюс просто всегда нравилось взаимодействие с компьютером, в детстве мечтал стать программистом, с того момента как сисадмин учил меня играть в StarCraft😅

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

если хочеться поменять работу, то надо уметь писать проги на go. Изучением алгоритмов это вовсе не то, что надо освоить первым. Алгоритмы - это прикладная часть, сегодня она нужна, завтра нужно понимание протокола sip, после завтра...
А вот что действительно нужно - горутины, каналы, мьютексы и прочее. Вот пример тестового задания, которое я как-то давал соискателям:

Разработать модуль: "Шина", который должен являться подключаемым пакетом, реализует следующие функциональные возможности:
1. Все события выполняются асинхронно, то есть одновременно и не зависят друг от друга;
2. К шине можно подключиться в двух режимах работы только для получения данных или же для записи и получения данных;
3. Шина работает с событиями.Структура данных для события зависит от потребностей приложения, то есть набор данных может быть любым;
4. Вся внутренная логика шины должна быть скрыта.


Обязательные условия при написании кода:
1. Использовать только стандартные средства и библиотеки языка Go
2. Модуль не должен реализовать сетевые интерфейсы, так как используется внутри приложения

Правильных решений более чем одно. Попробуйте реализовать, чисто для себя. Курсы Вас не спасут, надо самому разрабатывать и писать код, тогда и результат будет.

раскрыть ветку (6)
0
Автор поста оценил этот комментарий

Спасибо за совет, я обязательно попробую. Я сейчас закончил курсы, вот сижу думаю куда дальше податься - искать работу? Трезво оценивая свои знания - вердикт - рано.

Смотрю в сторону двух вариантов (пока других путей не вижу, если есть что посоветовать - буду признателен).

1. Стажировки - вот тут нужны алгоритмы, без их знания - не решить тестовое задание.

2. Фриланс - сейчас пытаюсь писать ботов ТГ.

Есть в планах написать программу для себя (поможет в нынешней работе и будет вероятно пет-проектом).

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

я бы посоветовал фриланс, и работу не надо пока бросать и вариант получить опыт в разработке. Для ТГ ботов советую посмотреть как прикрутить к ним LLM, тема интересная и восстребованная. А прогу для себя - тут просто начинайте писать уже сегодня, нужна практика и еще раз практика.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Хорошо, да смотрю очень востребовано, через раз практически встречаются заказы такие (сижу на фриланс бирже). Удивился, что люди просят разработать ботов для психологов с уклоном в эзотерику (карты Таро, начальные карты и тому подобное, могу ошибаться в терминах, т.к. не интересовался этой темой и вообще считаю очень сомнительной🫥)

0
Автор поста оценил этот комментарий

Если честно - я бы не разобрался с таким заданием. Ощущение, что пропущено самое главное - что вообще за "события" выполняет "шина" и на хрена она нам нужна? И не понятно, что за "подключение к шине" при условии, что "модуль не должен реализовывать сетевые интерфейсы", так он еще и "используется внутри приложения"?


У меня сложилось ощущение, что вам нужна кафка внутри приложения. То-есть что-то типа паттерна наблюдателя. Но реально - это все человек уровня стажера поймет?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

я в этом всем ни уха ни рыла, но воткнул задачу в дипсик и получил вот чего # Шина событий на Go

Реализация модуля "Шина" (Event Bus) для асинхронной обработки событий внутри приложения:

```go

// Package bus реализует шину событий для асинхронной обработки

package bus

import (

"errors"

"sync"

)

// Event представляет собой событие с произвольными данными

type Event struct {

Topic string

Data interface{}

}

// Handler определяет тип функции для обработки событий

type Handler func(event Event)

// Bus интерфейс для работы с шиной событий

type Bus interface {

// Publish отправляет событие в шину

Publish(topic string, data interface{}) error

// Subscribe подписывает обработчик на события определенного топика

Subscribe(topic string, handler Handler) error

// Unsubscribe отписывает обработчик от топика

Unsubscribe(topic string, handler Handler) error

}

// Реализация шины

type eventBus struct {

mu sync.RWMutex

subscribers map[string][]Handler

closed bool

}

// New создает новую шину событий

func New() Bus {

return &eventBus{

subscribers: make(map[string][]Handler),

}

}

// Publish отправляет событие в шину

func (b *eventBus) Publish(topic string, data interface{}) error {

b.mu.RLock()

defer b.mu.RUnlock()

if b.closed {

return errors.New("event bus is closed")

}

event := Event{

Topic: topic,

Data: data,

}

if handlers, ok := b.subscribers[topic]; ok {

// Запускаем обработчики в отдельных горутинах

for _, handler := range handlers {

go handler(event)

}

}

return nil

}

// Subscribe подписывает обработчик на события определенного топика

func (b *eventBus) Subscribe(topic string, handler Handler) error {

b.mu.Lock()

defer b.mu.Unlock()

if b.closed {

return errors.New("event bus is closed")

}

b.subscribers[topic] = append(b.subscribers[topic], handler)

return nil

}

// Unsubscribe отписывает обработчик от топика

func (b *eventBus) Unsubscribe(topic string, handler Handler) error {

b.mu.Lock()

defer b.mu.Unlock()

if b.closed {

return errors.New("event bus is closed")

}

if handlers, ok := b.subscribers[topic]; ok {

for i, h := range handlers {

if &h == &handler {

b.subscribers[topic] = append(handlers[:i], handlers[i+1:]...)

return nil

}

}

}

return errors.New("handler not found")

}

// Close закрывает шину (очищает все подписки)

func (b *eventBus) Close() {

b.mu.Lock()

defer b.mu.Unlock()

b.closed = true

b.subscribers = make(map[string][]Handler)

}

```

## Пример использования

```go

package main

import (

"fmt"

"time"

"./bus" // путь к вашему модулю

)

func main() {

// Создаем шину

eventBus := bus.New()

// Обработчик 1

handler1 := func(event bus.Event) {

fmt.Printf("Handler 1: Received event on topic %s: %v\n", event.Topic, event.Data)

}

// Обработчик 2

handler2 := func(event bus.Event) {

fmt.Printf("Handler 2: Received event on topic %s: %v\n", event.Topic, event.Data)

}

// Подписываем обработчики на топик "test"

eventBus.Subscribe("test", handler1)

eventBus.Subscribe("test", handler2)

// Публикуем событие

eventBus.Publish("test", "Hello, World!")

eventBus.Publish("test", 42)

eventBus.Publish("test", struct{ Name string }{Name: "Alice"})

// Даем время на обработку событий

time.Sleep(100 * time.Millisecond)

// Отписываем один обработчик

eventBus.Unsubscribe("test", handler1)

// Публикуем еще одно событие

eventBus.Publish("test", "Only handler2 should receive this")

// Даем время на обработку последнего события

time.Sleep(100 * time.Millisecond)

}

```

## Особенности реализации

1. **Асинхронность**: Каждый обработчик запускается в отдельной горутине, что обеспечивает параллельное выполнение.

2. **Режимы работы**:

- Подписка (`Subscribe`) - только получение данных

- Публикация (`Publish`) + подписка - запись и получение данных

3. **Гибкость данных**: Структура `Event` позволяет передавать любые данные через поле `interface{}`.

4. **Инкапсуляция**: Вся внутренняя логика скрыта, доступ только через интерфейс `Bus`.

5. **Потокобезопасность**: Использование `sync.RWMutex` гарантирует безопасную работу в многопоточной среде.

Модуль не использует сетевые интерфейсы и работает только в рамках одного приложения, используя стандартные средства Go.

и тут вопрос - джуны вымрут как класс?

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества