Найти тему
Активируем любые IDE от Jetbrains👩‍💻 Делимся с вами годной статьей по активации продуктов и некоторых плагинов в довольно удобных и популярных IDE. Статья Статья Статья Надеемся, что это будет полезно и пригодится вам.👍
1 месяц назад
Часть 2: Работа с терминалом 1. Grep🟢 Grep — это мощный инструмент для поиска текста в файлах по шаблону. Шаблон задается с помощью регулярных выражений. Синтаксис: grep Pattern File Pattern— это строка или регулярное выражение, которое нужно найти. File— путь к файлу, в котором выполняется поиск. grep .a English.txt London is the capital of Great Britain 2. Редактирование файлов🗣️ Для редактирования файлов можно использовать различные текстовые редакторы: Nano, Vim, Emacs и другие. Чтобы вызвать нужный редактор,необходимо перед названием файла написать название редактора: nano ~/.bashrc 3. Манипуляции с файловой структурой🖥 -Создание файла: touch filename -Удаление файла: rm filename -Перемещение файла: mv filename directory -Переименование файла: mv filename newfilename -Копирование файла: cp filename directory -Создание папки: mkdir foldername -Удаление папки: (или , чтобы удалить все файлы и подпапки) : rm -r folder (rm -rf folder чтобы удалить все полностью) 4. Переменные окружения📎 Переменные окружения — это переменные, которые существуют в рамках текущей сессии командной оболочки. Они загружаются при ее инициализации. Просмотр переменных: env Переменные окружения помогают отделить способ появления значений в системе от команд, которые их используют. Эти посты предназначены для ознакомления с основными функциями терминала. Полное понимание работы придет с практикой. Рекомендую пройти курс на Hexlet для более глубокого изучения.Чем больше знаете тем проще решать проблемы 💯
2 месяца назад
Работа с терминалом — необходимая часть работы любого разработчика, рано или поздно каждый как-то встретится с этим. Поэтому полезно знать основные команды и идеи для работы с этим инструментом. 👩‍💻 Будет 2-3 поста по этой теме, также советую пройти неплохой бесплатный курс от hexlet (посты будут теоретической выжимкой из него).🥶 1. Навигация🗺 - Узнать директорию, в которой мы находимся- pwd pwd /home/ippolid - Посмотреть список файлов - ls (флаги дают доп. функционал) ls Camera 'Снимки экрана' -Переместиться в другую директорию - cd cd .. - на директорию выше cd ~/ -домашняя директория 2. Чтение файлов📖 -Посмотреть содержимое файла - cat (плохо работает для больших файлов, т.к. сложно прогрузить слишком много строк в консоли) cat English.txt London is the capital of Great Britain -Посмотреть верхушку файла - head (по дефолту первые 10 строк, можно изменить через флаг -n) head -n 3 proxies.txt 120.25.189.254:8800 103.174.236.72:8080 8.212.151.166:8008 -Посмотреть конец файла - tail (по дефолту последние 10 строк, можно изменить через флаг -n) tail -n 3 proxies.txt 107.189.8.240:8080 116.104.133.165:10010 116.104.134.222:10000 -Также можно посмотреть файл через пейджеры (программы для просмотра содержимого файла). В отличие от cat они прогружают конкретный участок кода, поэтому работают быстрее. Примером может послужить пейджер - less . Чтобы посмотреть фаил надо написать вместо cat ,less Это пока основные команды, которые вы будете использовать 90% времени. В следующем посте узнаем, как редактировать файлы, записывать и читать их, искать по регулярным выражениям и другое.😎 Надеюсь, это будет полезно и когда-нибудь пригодится вам.👍
2 месяца назад
Делаем кастомный терминал(bash) (1 фото)👩‍💻 1.Скачиваем oh-my-bash для нашего терминала👩‍💻 bash -c “$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" После этого у вас уже поменяется терминал 🌐2.Устанавливаем нужную тему (список всех тем) . Нужно в файле .bashrc изменить строчку OSH_THEME=”put your theme name here” (можно через nano ~/.bashrc) . Советую тему-agnoster 👀3. Изменяем настройки самого терминала(2,3,4 фото). Нужно скачать и поставить указанный шрифт (чтобы все иконки корректно отображались). Цветовую палитру можно выбрать по желанию ⁉️4.Также можно поставить различные плагины, но это уже по желанию 🔝Всё,готово!🔝
2 месяца назад
Тип map. Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура map в Go - это хэш-таблица с поддержкой: Хэширование ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. Бакеты - данные распределены по группам. Алгоритм работы 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующиеТип map. Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура map в Go - это хэш-таблица с поддержкой: Хэширование ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. Бакеты - данные распределены по группам. Алгоритм работы 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующие элементы ре-хэшируются.Тип map. Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура map в Go - это хэш-таблица с поддержкой: Хэширование ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. Бакеты - данные распределены по группам. Алгоритм работы 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующие элементы ре-хэшируются.Тип map. Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура map в Go - это хэш-таблица с поддержкой: Хэширование ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. Бакеты - данные распределены по группам. Алгоритм работы 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующие элементы ре-хэшируются.Тип map.
4 месяца назад
Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура map в Go - это хэш-таблица с поддержкой: Хэширование ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. Бакеты - данные распределены по группам. Алгоритм работы 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующие элементы ре-хэшируются.Тип map. Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? .
4 месяца назад
Тип map👩‍💻 Многие знают, что map в Go — это удобный инструмент для работы с ключами и значениями. Но что происходит внутри? Структура➡️ map в Go - это хэш-таблица с поддержкой: -Хэширования ключей - каждый ключ проходит через хэш-функцию, что позволяет быстро находить соответствующие значения. -Бакетов - данные распределены по группам. Алгоритм работы 💭 1. Хэширование ключа При добавлении данных Go использует хэш-функцию для вычисления индекса, в котором хранится ключ-значение. 2. Бакеты Данные размещаются в бакетах. Каждый бакет может содержать несколько пар ключ-значение. Если бакет переполняется, данные распределяются в дополнительные структуры, такие как overflow-buckets. 3.Поиск При обращении к ключу Go снова вычисляет его хэш и идет в соответствующий бакет, затем линейно ищет ключ внутри (это позволяет добиться константной сложности выбора из мапы, так называемой O(1)). 4.Распределение памяти и релокация. Если map переполняется, запускается механизм реалокации и все существующие элементы ре-хэшируются. Оптимизация и нюансы💡 1. Порядок элементов в map не гарантируется, так как это зависит от внутреннего расположения в бакетах. 2. map не потокобезопасен — при доступе из нескольких горутин нужен мьютекс или sync.Map. 3. Реалокация может потреблять много памяти, поэтому важно не задавать излишне маленький map. В связи с тем что Go необходимо сравнивать ключи в мапе, на них наложено строгое ограничение - они должны быть comparable(сравнимыми). Почему же это важно? 1.Проверка равенства ключей Для работы map нужно уметь проверять, равны ли два ключа. Например, при поиске значения или проверке существования ключа. 2. Хэширование Go использует хэш-функцию для вычисления индекса бакета, где будет храниться ключ. Хэширование должно быть однозначным для одного и того же ключа. Если ключ нельзя сравнить, невозможно гарантировать, что данные будут правильно обработаны (например, при ре-хэшировании). 3. Оптимизация памяти и времени Если бы Go позволял использовать неcomparable типы (например, срезы), потребовались бы сложные алгоритмы сравнения (поэлементно). Это замедлило бы работу и усложнило реализацию. ✔️Comparable типы в go: простые типы; int, float64, string, bool. указатели: *T. пользовательские типы не содержащие срезов, мап или функций. 🚫Не Comparable типы в go: срезы - []T мапы - map[k]v функции - func Mindstorm | Подписаться
4 месяца назад
Как устроены Slices (слайсы) или же срезы в Golang👩‍💻? В этом посте можно узнать о основных характеристиках и методах работы с этой структурой Срезы можно рассматривать как расширенную реализацию массивов. Срезы были реализованы в Go, чтобы покрыть некоторые крайне распространенные варианты использования, с которыми разработчики сталкиваются при работе с коллекциями, например, динамическое изменение размера коллекций.⚙️ Устройство слайсов в памятиℹ️ Из официальной документации заметим, что срез имеет следующую структуру: type slice struct { array unsafe.Pointer len int cap int } array- указатель на начало последовательности данных len - количество элементов которые, содержатся в срезе на данный момент cap-вместительность или же допустимая длина среза Инициализация срезов⚡️ Срез, в отличии от массива, не выделяет память во время инициализации. Фактически, срезы инициализируется с нулевым (nil) значением. var z []int //слайс с cap=0 ,len=0 var v = []int{1,2,3} //слайс с заранее заданными значениями , cap=3 , len=3 p:=[]int{1,2,3,4}//слайс с заранее заданными значениями , cap=4 , len=4 //Отдельно стоит упомянуть метод make, который сразу выделяет нужную часть памяти k:=make([]int,5,6) // len=5,cap=6 , p=[0,0,0,0,0] Добавление новых элементов🚨 Чтобы добавить новые элементы к срезу, необходимо использовать функцию append. nums := []int{8, 0} nums = append(nums, 8) Под капотом это будет выглядеть, как присвоение значения, указанного для нового элемента, и после – возвращение нового среза. Длина нового среза будет на единицу больше.
5 месяцев назад
👀Почему язык программирования Golang так хорош и кому он нужен? Разберемся с этим в данном посте.👩‍💻 🌐На данный момент Go находится на шестом месте по популярности среди языков программирования, которые используются на GitHub.Golang был разработан Google в 2007 и имеет открытый код, также его документация очень хорошо написана. 🔝Перечислим основные преимущества Golanga: 1.Простота и однозначность : Go прост в изучении и в понимании основных концепций. Есть популярная байка, что всю спецификацию и документацию Go можно без проблем прочитать за полдня. 2.Производительность и горутины : Golang был разработан для автоматизации процессов в больших масштабах, поэтому с ним можно создавать системы с высокой производительностью и нагрузкой.Также преимуществом являются легковесные потоки,они могут намного ускорить программу, используя те же ресурсы. 3.Комьюнити : Так как Golang опен сурс проект, то он постоянно развивается и имеет огромную поддержку. Разработчики очень активны и заинтересованы в проекте. Также зарплаты Go специалиста приятно удивляют. 💯Теперь разберемся кому же подойдет Golang : - Из-за своей спецификации Go больше подойдет для разработке сетевых и сервеных приложений,создание другого типа приложений может вызвать затруднения. -Также в Golang нет привычного ООП, так что программистом использующих данный стиль создания приложений стоит поискать другой яп. 💬Выводы : Golang является мощным инструментом в руках разработчиков. В данный момент многие компании переходят на данный язык программирования , так как он решает их проблемы за разумную "цену". Изучение Go является довольно перспективным и интересным занятием, которое точно найдет применение в жизни. Всем успехов в обучении и работе !👍
6 месяцев назад
Мощная подборка материалов и не только на различные темы👀 В ней можно найти : • Подборку материалов по программированию • Самые лучшие ии сайты на все случаи жизни • Курсы по различным сферам математики • Многое другое Все это по этой ССЫЛКЕ
6 месяцев назад
Мощная подборка материалов и не только на различные темы. В ней можно найти как : Подборку материалов по программированию
6 месяцев назад
👀👀👀Как сгенерировать gRPC клиент и сервер из .proto файла?💪 Для создания gRPC клиент-серверной архитектуры в Go, используется генерация кода на основе файла .proto. В этом посте мы рассмотрим, как сгенерировать Go-код для gRPC из вашего .proto файла на примере сервиса авторизации. Шаг 1: Подготовка .proto файла. Для начала необходимо указать какую версию proto мы будем использовать. В нашем случае мы будем использовать 3 ,самую новую версию🟡 syntax = "proto3"; Далее указываем импорты необходимых нам типов данных ✔️ package api; import "google/protobuf/timestamp.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/wrappers.proto"; 👌Тут мы импортируем специальные типы данных для временной метки (timestamp.proto), пустое сообщение (empty.proto) и обертку над типом string для того чтобы различать null и пустые строки🤔 Далее указываем специальную конструкцию которая будет указывать, в каком Go-пакете будет сгенерированный код. Конструкция разделена на две части: github.com/YouRepository/auth/pkg/auth – путь к пакету, который будет импортироваться в Go-коде. auth – краткое имя пакета, которое используется внутри Go-файлов для ссылок на сгенерированные типы. option go_package = "github.com/YouRepository/auth/pkg/auth;auth"; Далее приступаем к описанию хэндлеров и структур которые будут в нашем gRPC сервере✏️ service Auth { rpc Create(CreateRequest) returns (CreateResponse); rpc Get(GetRequest) returns (GetResponse); rpc Update(UpdateRequest) returns (google.protobuf.Empty); rpc Delete(DeleteRequest) returns (google.protobuf.Empty); } enum Role { ROLE_UNSPECIFIED = 0; USER = 1; ADMIN = 2; } message User { string name = 1; string email = 2; Role role = 3; } message CreateRequest { User user = 1; string password = 2; string password_confirm = 3; } message CreateResponse { int64 id = 1; } message GetRequest { int64 id = 1; } message GetResponse { int64 id = 1; User user = 2; google.protobuf.Timestamp created_at = 3; google.protobuf.Timestamp updated_at = 4; } message UpdateRequest { int64 id = 1; google.protobuf.StringValue name = 2; google.protobuf.StringValue email = 3; } message DeleteRequest { int64 id = 1; } Изначально определяется Auth - gRPC сервис с четырьмя методами. 💬Create: Создание нового пользователя. 💬Get: Получение информации о пользователе по ID. 💬Update: Обновление данных пользователя.Ответ пустой. 💬Delete: Удаление пользователя.Ответ пустой. И далее определяются структуры которые будут кодогенерироваться из нашего proto файла, а в дальнейшем использоваться для запросов и ответов сервера. Стоит обратить внимание на одно из ключевых преимуществ gRPC над стандартным HTTP, которое отчетливо видно в этом коде: нет зависимости от имён полей, а важны только номера. В gRPC сообщения и данные определяются с помощью пронумерованных полей. message User { string name = 1; string email = 2; Role role = 3; } Шаг 2. Создание Makefile⚙️ Далее нам нужно создать Makefile в корне нашего проекта, чтобы автоматизировать процесс установки зависимостей и генерации кода из .proto файлов. Этот Makefile позволит быстро подготовить всё необходимое для работы с gRPC. Таким образом после запуска генерации кода установятся все зависимости и сгенерируется готовый gRPC сервер со всеми указанными в proto файле хэндлерами и структурами ответов и запросов⌨️
6 месяцев назад