37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
🦫Реализация односвязного списка в Golang

Связные списки — это фундаментальные структуры данных информатики и программирования, часто применяемые для хранения и управления набором данных, элементы которого не хранятся в смежных участках памяти. Рассмотрим реализацию односвязного списка на Go.

Введение в односвязные списки

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

У односвязного списка:

⬅️ В каждом узле содержатся данные.
⬅️ В каждом узле имеется ссылка — указатель next  — на следующий узел последовательности.
⬅️ В последнем узле обычно имеется ссылка nil, которой указывается на конец списка.

Узел — основа связного списка
В сердце связного списка находится понятие узла.

УЗЕЛ — ЭТО СТРОИТЕЛЬНЫЙ БЛОК ИЛИ КОНТЕЙНЕР, В КОТОРОМ СОДЕРЖАТСЯ: 1) СОХРАНЯЕМЫЕ ДАННЫЕ — ЧТО БЫ ВЫ НИ ВЫБРАЛИ — И 2) УКАЗАТЕЛЬ НА ТО, ЧТО СЛЕДУЕТ ДАЛЬШЕ.

Этой простой структурой формируется основа для создания односвязных — с последовательно связанными узлами — списков и двусвязных, где у узлов имеются ссылки на следующий и предыдущий узлы:

type Node struct {
data int
next *Node
}

type LinkedList struct {
head *Node
}


Структура Node здесь фундаментальный строительный блок односвязного списка. В ней инкапсулируются основные компоненты каждого узла списка:

▪️Поле data  — это хранимые в узле данные или значение. Мы задали ему целочисленный int, хотя на практике это может быть любой тип данных, необходимый конкретному приложению.
▪️Поле next  — это ссылка или указатель на следующий узел связанного списка. Ею узлы связываются в последовательную цепочку. Когда узел в списке последний, полем next указывается на nil  — конец списка.

Фактически структурой Node определяется, как выглядит отдельный элемент связного списка — с данными, которые в нем содержатся, и ссылкой на следующий элемент.

Структура LinkedList  — это связный список в целом, ею управляется набор узлов:

▪️Поле head  — ссылка или указатель на первый узел связного списка. Это точка входа в список, через которую получается доступ ко всей последовательности узлов для манипулирования ими.
Вместе структуры Node и LinkedList  — основа односвязного списка на Go. Структурой Node определяется то, как структурируются отдельные элементы, структурой LinkedList  — как эти элементы организуются в целостную структуру данных.

Хотя связный список создается и без типа LinkedList, предпочитаю как первичную структуру данных именно его LinkedList  — такой контейнер для связного списка, где инкапсулируется весь список, и кроме того, способ контролировать поведение списка.

Вставка данных в связный список

📌Читать

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🎊 Выпущен релиз Go 1.22 Release Candidate 1!

🏃‍♂️ Запустите его в dev! Запускайте в prod! Сообщайте об ошибках! https://go.dev/issue/new

📢 Анонс: https://groups.google.com/g/golang-announce/c/FIUY9kd7fc0

⬇️ Скачать: https://go.dev/dl/#go1.22rc1

#golang

@Golang_google
🖥 CspChan

Чистая реализация каналов Go на C89, включая блокирующие и неблокирующие селекты

https://github.com/rochus-keller/CspChan

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 KubeGPT

Новый инструмент оповещения об ошибках Kubernetes на основе Go с интеграцией GPT для Slack!

📌 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⛄️❄️ Какой вы гофер в эти зимние праздники?

@Golang_google
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Dive

Полезный инструмент для изучения Docker-образа, содержимого слоев и поиска способов уменьшения размера Docker-образа
Docker/OC 🔥

https://github.com/wagoodman/dive

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Go 1.22: интерактивные заметки c кодом

Основано на заметках о выпуске Go 1.22 от команды Go (лицензия 3-Clause BSD), с добавлением множества интерактивных примеров. Эта запись в блоге синхронизируется с исходным документом по мере его обновления.

Выход Go 1.22 запланирован на февраль 2024 года, но вы уже можете опробовать многие из его возможностей, не выходя из браузера. Читайте дальше и смотрите!

https://antonz.org/go-1-22/

#golang #programming

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю

Почитать:
Toolchain в Go
Создание эмулятора игр MS-DOS в Kubernetes
Event Sourcing и CQRS в Go
Управление зависимостями в Go
— Полный отчет Github за 2023 о состоянии проектов.
9 вопросов для собеседования по SQL в Apple
Автоматизация работы программиста golang
Object-Relational Mapping (ORM) в Golang
Bundling Go Lambda Functions with the AWS CDK
Go concurrency simplified. Part 4: Post office as a data pipeline
How to Test SMTP Settings under 5 Minutes
Building a Go Package with Melange and a Docker Image with Apko
[Go Tour ] 3. Hot-reload
API completa em Golang - Parte 4
🔥 Big frontend update: the Gowebly CLI now supports Bootstrap and Bulma
Modularização de Software
Exploring Prometheus Code - part 1 (personal notes)
Exploring Go: A Powerhouse In Modern Software Development

Посмотреть:
🌐From Svelte to Go and HTMX
🌐 Mixtral 8x7B - новый ИИ. Нейросети, которые ДОМИНИРУЮТ на другими моделями ( 08:04)
🌐 How To Setup A Golang + Templ Project Structure ( 31:20)
🌐 Region Based Distributed Service Scheduling In Golang ( 02:13:14)
🌐 Я не мог читать чужой код #айти #программирование #программист ( 00:48)
🌐 Снес базу данных в Тинькофф #айти #программирование #программист ( 01:01)
🌐 Postgres Integration tests in Golang?! ~ Integration Testing in Go ( 06:33)
🌐 Dynamic Feature Flags with Go Routines!? ~ Feature Switches in Golang ( 08:09)
🌐 FULL STACK Golang + HTMX Building an Engineer Recruitment Platform Golang ~ LIVE! ( 01:42:35)

Хорошего дня!

@Golang_google
🦦 Otter

Самая быстрая библиотека golang in-memory cache, основанная на алгоритме S3-FIFO. Раюотает во много раз быстрее, чем Ristretto.

Внутри используется хеш таблица, которая имеет мьютекс на каждый бакет + seq lock для чтения + каждый бакет помещается в две кеш линии, что предотвращает false sharing и это намногооо быстрее map с мьютексом и sync.Map.
Также исрользуется несколько трюков для избегания частых локов политики вытеснения: при чтении используются wait-free буфферы, которые иногда могут терять данные, но так как главная задача кеша - хранить наиболее частые элементы, то потери незначительны + реализация mpsc очереди при записи, которая значительно превосходит каналы по перфомансу и принцип из статьи bp-wrapper, который коротко можно назвать "batch, batch, batch" aka кеш не обновляет политику мгновенно, а только после наполнения небольшого буффера.

go get -u github.com/maypok86/otter

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 SMTP-клиент Go CLI

Очень легкий CLI SMTP-клиент для удобной отправки писем из командной строки.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Время Go. Разбор и объяснение Time и time.Location.

https://www.willem.dev/articles/time-location-explained/

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨 gocol

Простая утилита для колоризации ваших тестов!

Github

@Golang_google
Каковы ваши ожидания по зарплате? Это частый вопрос от рекрутеров даже до технических интервью и давай разберемся как на него можно отвечать

Есть два наиболее эффективных варианта ответа:
- Указать диапазон, в котором ты рассматриваешь предложения: этот вариант рекомендуют рекрутеры, включая Киру Кузьменко (Если не знаком с ней, погугли. Делает оч крутой контент.), с которой я обсудил этот вопрос на YaTalks 2023
- Вернуться к вопросу позже: этот вариант чаще всего предпочитаю я, если разработчик, которого консультирую имеет грейд между Middle и Senior (уж очень хорошо работает этот метод, когда спорный грейд)

Почему вообще рекрутеры советуют огласить зарплатные ожидания в начале? Основная причина, о которой говорят открыто - это "быстрый фильтр для тебя и рекрутера", однако стоит помнить и о недостатках:
- Назвав мелкий диапазон можете в нем и остаться, хотя достойны большего
- Психологическое ограничение для себя (может показаться надуманным, но ЗП в 500-600 тысяч многим кажется чем-то недостижимым)
- и так далее.
P.S. здесь не обсуждаем, насколько часто работодатели прибегают к этим приемам, скорее даю пищу для размышления...

Ты подумал и и решил оглашать ЗП после всех технических интервью, чтобы собрать побольше информации о компании и вдумчиво огласить желаемую вилку. Но что сказать рекрутеру, чтобы не выдать свои ожидания в самом начале? Вот несколько вариантов:
- На данный момент мне не комфортно говорить о деньгах. В первую очередь хочу пройти все технические интервью и познакомиться с командой, а только потом буду готов огласить сумму
- Предлагаю вернуться к вопросу о деньгах после прохождения всех технических интервью

Из рисков тут пожалуй только сразу получить отказ, но на этот счет я никогда не переживаю, ведь это показатель, что компания не готова выстраивать диалог и может быть “проблемной” . P.S. Для тебя это может быть не так, поэтому на консультациях этот момент обсуждаю заранее

Если уж совсем достали вопросами по ЗП, то фраза "Вы ставите меня в неприятное положение этим вопросом. Я сказал, что готов вернуться к этому после всех технических секций, и мое решение не изменится!" поможет остудить собеседника (применять с осторожностью!)

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

На канале делюсь опытом ведения зарплатных переговоров, а так же историями про свои взлеты и падения в айтише. Залетай, будет интересно! Комментарии открыты и дискуссии приветствуются :)
👣 DynamoMQ

DynamoMQ - это библиотека очередей сообщений, использующая DynamoDB в качестве хранилища, написанная на Go.

$ go install github.com/vvatanabe/dynamomq/cmd/dynamomq@latest

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Антипаттерны архитектуры

Откройте для себя распространенные антишаблоны архитектуры, узнайте, как их избегать и преодолевать "подводные камни" проектирования!

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

В этом проекте собраны ценные сведения, практические советы и примеры из реальных проектов для обучения и помощи в создании лучших программных архитектур и улучшать существующие.

Проект
Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю

Почитать:
Миграции в YDB с помощью «goose»
Логирование в Golang
100 вопросов для подготовки к собесу Data Science
Дженерики в go
Проектирование fault-tolerant систем на Go
WebSocket в Go и причем тут горилла
Building golang project from scratch - part 3 - setting up the database using docker
Build a Golang Todo App Backend: A Step-by-Step Guide
Go versus Rust: Choosing the Best Language for You to Learn in 2024
Automate the task of creating requirements.txt with pyreqs!
OnLogs – open-source simplified web logs viewer for Docker containers
Evitando SQL Injection com Golang
5 Golang Features I Wished Were Different!
Десять самых ярких ИИ-работ от NVIDIA Research за 2023 год

Посмотреть:

🌐 100 вопросов с собеседований Data Science — часть 1 ( 36:48)
🌐FULL STACK Golang + HTMX Building an Engineer Recruitment Platform Golang ~ LIVE!
🌐 Building FFAAS In Go. Fast Function As A Service. ( 01:48:16)
🌐 Coding Instant WASM Rollbacks In Go ( 01:32:12)
🌐 Не мог найти первую работу программистом #айти #программирование #программист ( 00:55)
🌐 Дубай для программиста | Сколько стоит жить в Дубае в 2023 ( 05:38)

Хорошего дня!

@Golang_google
🖥 Cursus Database System

Если бы у MongoDB и MySQL родился ребенок, то это был бы CursusDB. Шутки в сторону CursusDB - это распределенная документо-ориентированная in-memory база данных с открытым исходным кодом и SQL-подобным языком запросов, написанным на чистом GO.

Github
Документация

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM