Golang
Распространенные "подводные камни" при проведении тестов на производительность в GO Программистам Go повезло: в стандартную библиотеку - в пакет testing - встроены отличные средства тестирования и бенчмаркинга. Однако бенчмаркинг - это сложно. Это одна из…
Self hosted mtproto messenger.
Mtproto cервер с открытым исходным кодом, написанный на Go, который совместим с клиентом Telegram.
▪Github
▪Teamgram
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Автономный FTP-сервер на Go с коннекторами SFTP, S3, Dropbox и Google Drive.
go install github.com/fclairamb/ftpserver@main
ftpserver &
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Лучший способ получать свежие обновлении и следить за трендами в разработке.
Python: t.me/pythonl
C#: t.me/csharp_ci
C/C++/ t.me/cpluspluc
Машинное обучение: t.me/ai_machinelearning_big_data
Data Science: t.me/data_analysis_ml
Devops: t.me/devOPSitsec
Go: t.me/golang_interview
Базы данных: t.me/sqlhub
Rust: t.me/rust_code
Javascript: t.me/javascriptv
React: t.me/react_tg
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Linux: t.me/+A8jY79rcyKJlYWY6
Big Data: t.me/bigdatai
Хакинг: t.me/linuxkalii
Java: t.me/javatg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
🇬🇧Английский: t.me/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Полный курс Golang разработчика 2023 года. Часть1.
1. О курсе - https://www.youtube.com/watch?v=Nv0vmR5OqRg&t=34s
2. Установка GO - https://www.youtube.com/watch?v=gi6gAhzUhUg
3. Пакеты в Golang https://www.youtube.com/watch?v=RNVhf-zBpdQ
4. Типы данных в Go - https://www.youtube.com/watch?v=_ilP500FEP8&t=16s
5. Строки и руны - https://www.youtube.com/watch?v=wUQB74nNxos&t=27s
6. Инструменты командной строки - https://www.youtube.com/watch?v=LzqVFx6yOAs&t=8s
7. Введение в переменные - https://www.youtube.com/watch?v=zQa85CrYQJ4&t=190s
8. Переменные на практике - https://www.youtube.com/watch?v=P9Lk0EiO2pU&t=1s
9. Упражнения с переменными -
https://www.youtube.com/watch?v=huj6RHQC34I&t=1s
10. Работа с функциями - https://www.youtube.com/watch?v=euudha7zAiU&t=7s
11. Функции на практике - https://www.youtube.com/watch?v=YdoMOD6H_nk
12. Управление потоками с операторами if else - https://www.youtube.com/watch?v=Mq6WQy_eq_k&t=1s
13. Оператор Switch - https://www.youtube.com/watch?v=4REsob985vc
14. Циклы - https://www.youtube.com/watch?v=gpt8IGahbXo
15. Структуры - https://www.youtube.com/watch?v=VrOflBI4f_E&t=311s
16. Массивы - https://www.youtube.com/watch?v=QrVHFGtCAnE
17. Срезы - https://www.youtube.com/watch?v=XA1WFY1kv2o&t=671s
18. Карты - https://www.youtube.com/watch?v=XA1WFY1kv2o&list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66&index=18
19.Указатели - https://www.youtube.com/watch?v=LYFOJhP28Ro
20. Методы - https://www.youtube.com/watch?v=hmWwp04_XC0
21. IOTA - https://www.youtube.com/watch?v=La67BqQdoys
22.FMT - https://www.youtube.com/watch?v=-Ie4-R23VTk
23.INIT - https://www.youtube.com/watch?v=riIi-FpSOuc
24 Тесты- https://www.youtube.com/watch?v=AprUuq_rm0I
25 Интерфейсы - https://www.youtube.com/watch?v=Amun1J6KE3Q&t=70s
26. Обработка ошибок - https://www.youtube.com/watch?v=VTmHbN0Y4aU
Полный плейлист - https://www.youtube.com/playlist?list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66
📌Курс на stepik
@Golang_google
1. О курсе - https://www.youtube.com/watch?v=Nv0vmR5OqRg&t=34s
2. Установка GO - https://www.youtube.com/watch?v=gi6gAhzUhUg
3. Пакеты в Golang https://www.youtube.com/watch?v=RNVhf-zBpdQ
4. Типы данных в Go - https://www.youtube.com/watch?v=_ilP500FEP8&t=16s
5. Строки и руны - https://www.youtube.com/watch?v=wUQB74nNxos&t=27s
6. Инструменты командной строки - https://www.youtube.com/watch?v=LzqVFx6yOAs&t=8s
7. Введение в переменные - https://www.youtube.com/watch?v=zQa85CrYQJ4&t=190s
8. Переменные на практике - https://www.youtube.com/watch?v=P9Lk0EiO2pU&t=1s
9. Упражнения с переменными -
https://www.youtube.com/watch?v=huj6RHQC34I&t=1s
10. Работа с функциями - https://www.youtube.com/watch?v=euudha7zAiU&t=7s
11. Функции на практике - https://www.youtube.com/watch?v=YdoMOD6H_nk
12. Управление потоками с операторами if else - https://www.youtube.com/watch?v=Mq6WQy_eq_k&t=1s
13. Оператор Switch - https://www.youtube.com/watch?v=4REsob985vc
14. Циклы - https://www.youtube.com/watch?v=gpt8IGahbXo
15. Структуры - https://www.youtube.com/watch?v=VrOflBI4f_E&t=311s
16. Массивы - https://www.youtube.com/watch?v=QrVHFGtCAnE
17. Срезы - https://www.youtube.com/watch?v=XA1WFY1kv2o&t=671s
18. Карты - https://www.youtube.com/watch?v=XA1WFY1kv2o&list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66&index=18
19.Указатели - https://www.youtube.com/watch?v=LYFOJhP28Ro
20. Методы - https://www.youtube.com/watch?v=hmWwp04_XC0
21. IOTA - https://www.youtube.com/watch?v=La67BqQdoys
22.FMT - https://www.youtube.com/watch?v=-Ie4-R23VTk
23.INIT - https://www.youtube.com/watch?v=riIi-FpSOuc
24 Тесты- https://www.youtube.com/watch?v=AprUuq_rm0I
25 Интерфейсы - https://www.youtube.com/watch?v=Amun1J6KE3Q&t=70s
26. Обработка ошибок - https://www.youtube.com/watch?v=VTmHbN0Y4aU
Полный плейлист - https://www.youtube.com/playlist?list=PLysMDSbb9HcxpAb8lhnMaRpX890wSLz66
📌Курс на stepik
@Golang_google
🦫Сетевое программирование в Go
Напишем Go-программу для создания сервера, способного обрабатывать множество соединений и следить за ними.
Go-сервер похож на офисного секретаря, который принимает звонки (сетевые соединения), ведет учет звонков (логирование данных) и может общаться с несколькими людьми одновременно (параллельная обработка нескольких соединений).
Отправная точка: импорт пакетов
Начнем с импорта необходимых пакетов:
Эти пакеты предоставляют инструменты для работы с сетями, логирования, управления контекстами и использования семафоров. “Семафоры” — это образное выражение, обозначающее контроль над количеством параллельных процессов.
Пакет Semaphore
В Go пакет semaphore используется для ограничения количества определенных операций, выполняемых одновременно.
Представьте его в виде светофора. Он управляет потоком машин (комплексом программных задач), чтобы предотвратить пробки (чрезмерное использование ресурсов).
Что касается кода, то здесь semaphore ограничивает количество соединений, которые сервер обрабатывает одновременно.
Создание главной функции
Главная функция — это то место, где начинается магия. Именно она настраивает логирование и создает сетевого слушателя. Этот слушатель ожидает входящих соединений, подобно секретарю, ожидающему телефонного звонка.
🟠 Продолжение
@Golang_google
Напишем Go-программу для создания сервера, способного обрабатывать множество соединений и следить за ними.
Go-сервер похож на офисного секретаря, который принимает звонки (сетевые соединения), ведет учет звонков (логирование данных) и может общаться с несколькими людьми одновременно (параллельная обработка нескольких соединений).
Отправная точка: импорт пакетов
Начнем с импорта необходимых пакетов:
import (
"context"
"log"
"net"
"os"
"time"
"golang.org/x/sync/semaphore"
)
Эти пакеты предоставляют инструменты для работы с сетями, логирования, управления контекстами и использования семафоров. “Семафоры” — это образное выражение, обозначающее контроль над количеством параллельных процессов.
Пакет Semaphore
В Go пакет semaphore используется для ограничения количества определенных операций, выполняемых одновременно.
Представьте его в виде светофора. Он управляет потоком машин (комплексом программных задач), чтобы предотвратить пробки (чрезмерное использование ресурсов).
Что касается кода, то здесь semaphore ограничивает количество соединений, которые сервер обрабатывает одновременно.
Создание главной функции
Главная функция — это то место, где начинается магия. Именно она настраивает логирование и создает сетевого слушателя. Этот слушатель ожидает входящих соединений, подобно секретарю, ожидающему телефонного звонка.
func main() {
// Создаем семафор с максимальным весом maxConcurrentConnections.
sem = semaphore.NewWeighted(maxConcurrentConnections)
// Создаем файл лога.
logFile, err := os.OpenFile("network.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("Error opening log file: %v", err)
}
defer logFile.Close()
// Устанавливаем вывод логера по умолчанию в файл лога.
log.SetOutput(logFile)
// Прослушиваем входящие соединения.
l, err := net.Listen("tcp", ":2000")
if err != nil {
log.Fatalf("Error listening: %v", err)
}
// Закрываем слушателя при закрытии приложения.
defer func() {
if err = l.Close(); err != nil {
log.Printf("Error closing listener: %v", err)
}
}()
log.Println("Listening on localhost:2000")
// ...
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача
Дан массив целых положительных чисел nums, верните количество различных простых множителей в произведении элементов
nums
. Функция должна называться distinctPrimeFactors.
Обратите внимание, что:
▪Число, большее
1
, называется простым, если оно делится только на 1 и само на себя.▪Целое число val1 является множителем другого целого числа
val2
, если val2
/ val1
является целым числом.Пример
nums = [2,4,3,7,10,6]
distinctPrimeFactors(nums)
# 4
# Пояснение:
Произведение всех элементов в `
nums
` равно: `2 * 4 * 3 * 7 * 10 * 6 = 10080 = 25 * 32 * 5 * 7`.
Существует 4
различных простых множителя, поэтому мы возвращаем 4.
nums = [2,4,8,16]
distinctPrimeFactors(nums)
# 1
# Пояснение:
Произведение всех элементов в `
nums
` равно: `2 * 4 * 8 * 16 = 1024 = 210`.
Существует 1 различный простой множитель, поэтому мы возвращаем 1.
#junior #задача #golang
Пишите свое решение в комментариях👇
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🌟 Выпущены версии Go 1.20.7 и 1.19.12!
🔐 Security: Includes a security fix for crypto/tls (CVE-2023-29409)
📣 Announcement: https://groups.google.com/g/golang-announce/c/X0b6CsSAaYI
📦 Download: https://go.dev/dl/#go1.20.7
@Golang_google
🔐 Security: Includes a security fix for crypto/tls (CVE-2023-29409)
📣 Announcement: https://groups.google.com/g/golang-announce/c/X0b6CsSAaYI
📦 Download: https://go.dev/dl/#go1.20.7
@Golang_google
⚡ StateTrooper
StateTrooper - это пакет Go, в котором реализован конечный автомат (FSM) Он позволяет определять и реализовывать переходы между состояниями на основе заранее заданных правил.
▪ Github
@Golang_google
StateTrooper - это пакет Go, в котором реализован конечный автомат (FSM) Он позволяет определять и реализовывать переходы между состояниями на основе заранее заданных правил.
go get github.com/hishamk/statetrooper
▪ Github
@Golang_google
Высокопроизводительная библиотека RCX (Remote Command Execution), применяющая паттерн проектирования Command к архитектуре клиент-сервер и поддерживающая функции reconnect и keepalive.
•Github
•Пример
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Дайджест полезных материалов из мира Golang за неделю
Почитать:
— Хакните HL и заработайте 125.000 рублей
- Шбалон стратегия в Go
— Используем Hashicorp Vault для хранения секретов
— От C до Go. Как Golang объединил лучшие черты своих предшественников
— Отранжированные и смешные: создаем систему выстраивания пользовательской ленты
— В Go 1.21 существенно расширяется стандартная библиотека
— Как протестировать код на Go с базой данных?
— Golang — архитектурный линтер
— Сравниваем скорость и оверхеды библиотек Deep Copy для Go
— Добавляем Starlark в приложение на Go
— Как построить систему, способную выдерживать нагрузку в 5 млн rps
— Understanding the Singleton Pattern in Go
— Bringing Go Templates everywhere
— Minimum Cost for Tickets LeetCode
— Using Golang for your AWS Lambda Functions
— Unlocking AI Potential: Integrating OpenAI API into GoLang Microservices
— Designing Microservices RESTful API using Go with CRUD Operations: A Practical Guide
— Actors and Workflows: Building a Customer Loyalty Program with Temporal
— S1E3: Mastering Concurrency with Worker Pool in GoLang: A Scalable Solution for Efficient Task Processing
— Inspection, on the go
— Resolving type parameter ambiguities
Посмотреть:
🌐 Уроки Golang с нуля /#20 - Методы (⏱ 6:54)
Хорошего дня!
@Golang_google
Почитать:
— Хакните HL и заработайте 125.000 рублей
- Шбалон стратегия в Go
— Используем Hashicorp Vault для хранения секретов
— От C до Go. Как Golang объединил лучшие черты своих предшественников
— Отранжированные и смешные: создаем систему выстраивания пользовательской ленты
— В Go 1.21 существенно расширяется стандартная библиотека
— Как протестировать код на Go с базой данных?
— Golang — архитектурный линтер
— Сравниваем скорость и оверхеды библиотек Deep Copy для Go
— Добавляем Starlark в приложение на Go
— Как построить систему, способную выдерживать нагрузку в 5 млн rps
— Understanding the Singleton Pattern in Go
— Bringing Go Templates everywhere
— Minimum Cost for Tickets LeetCode
— Using Golang for your AWS Lambda Functions
— Unlocking AI Potential: Integrating OpenAI API into GoLang Microservices
— Designing Microservices RESTful API using Go with CRUD Operations: A Practical Guide
— Actors and Workflows: Building a Customer Loyalty Program with Temporal
— S1E3: Mastering Concurrency with Worker Pool in GoLang: A Scalable Solution for Efficient Task Processing
— Inspection, on the go
— Resolving type parameter ambiguities
Посмотреть:
🌐 Уроки Golang с нуля /#20 - Методы (⏱ 6:54)
Хорошего дня!
@Golang_google
This media is not supported in your browser
VIEW IN TELEGRAM
gophernotes позволяет использовать Go в интерактивном режиме в браузере, ноутбуке или десктопном приложении.
Можно использовать инструмент для создания и обмена документами, которые содержат код Go, уравнения, визуализации и пояснительный текст.
go install github.com/gopherdata/[email protected]
mkdir -p ~/.local/share/jupyter/kernels/gophernotes
cd ~/.local/share/jupyter/kernels/gophernotes
cp "$(go env GOPATH)"/pkg/mod/github.com/gopherdata/[email protected]/kernel/* "."
chmod +w ./kernel.json # in case copied kernel.json has no write permission
sed "s|gophernotes|$(go env GOPATH)/bin/gophernotes|" < kernel.json.in > kernel.json
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🦫Создание оркестратора для событийно-ориентированного приложения с Golang и RabbitMQ
Определение требований
Номера в гостинице бронируются по мере доступности.
• Создадим конвейер передачи запроса на бронирование номера по различным сервисам: резервирования, проверки, зачисления средств, бронирования.
Сервисам не нужно ждать ответа друг от друга — они даже не «знают», откуда запрос: у каждого сервиса только одна задача, и он хорошо с ней справляется. Это называется снижением связанности. Не нужно задумываться о причине запроса и ждать ответа других сервисов — используем все преимущества архитектуры микросервисов.
Сначала создадим блок-схему: показано в картинке.
Как видите, всего четыре этапа:
1. Проверка: в некоторых сценариях гостиницами обслуживаются не все желающие, например кому-то закрыт доступ или определенный номер резервируется только для конкретной группы. Это сложные правила, отделим их от веб-API.
2. Резервирование: одновременное бронирование номера несколькими людьми предотвращается глобальной блокировкой, подобной Redis.
3. Списание: зарезервировав номер, списываем средства.
4. Бронирование: завершив процесс списания, удаляем резервирование и бронируем номер.
Но в любом сервисе случаются ошибки.
Оркестрация — отличное подспорье для создания стабильного потока запросов, обработки ошибок и соответственных действий.
Действия требуются при очевидных ошибках:
• Недостаточно средств: удаляем резервирование.
• Ошибка при бронировании: возвращаем средства и удаляем резервирование.
Настройка RabbitMQ
Не знакомы с RabbitMQ? Посмотрите руководство для начинающих, хотя основы мы разберем.
RabbitMQ, как и Apache Kafka, — это приложение с отправителями и получателями сообщений. В приложении-чате отправителями сообщение отправляется, получателями — получается.
Как сообщению попасть к моему другу, а не случайному человеку в другой группе? Это сложная часть.
📌 Читать
@Golang_google
Определение требований
Номера в гостинице бронируются по мере доступности.
• Создадим конвейер передачи запроса на бронирование номера по различным сервисам: резервирования, проверки, зачисления средств, бронирования.
Сервисам не нужно ждать ответа друг от друга — они даже не «знают», откуда запрос: у каждого сервиса только одна задача, и он хорошо с ней справляется. Это называется снижением связанности. Не нужно задумываться о причине запроса и ждать ответа других сервисов — используем все преимущества архитектуры микросервисов.
Сначала создадим блок-схему: показано в картинке.
Как видите, всего четыре этапа:
1. Проверка: в некоторых сценариях гостиницами обслуживаются не все желающие, например кому-то закрыт доступ или определенный номер резервируется только для конкретной группы. Это сложные правила, отделим их от веб-API.
2. Резервирование: одновременное бронирование номера несколькими людьми предотвращается глобальной блокировкой, подобной Redis.
3. Списание: зарезервировав номер, списываем средства.
4. Бронирование: завершив процесс списания, удаляем резервирование и бронируем номер.
Но в любом сервисе случаются ошибки.
Оркестрация — отличное подспорье для создания стабильного потока запросов, обработки ошибок и соответственных действий.
Действия требуются при очевидных ошибках:
• Недостаточно средств: удаляем резервирование.
• Ошибка при бронировании: возвращаем средства и удаляем резервирование.
Настройка RabbitMQ
Не знакомы с RabbitMQ? Посмотрите руководство для начинающих, хотя основы мы разберем.
RabbitMQ, как и Apache Kafka, — это приложение с отправителями и получателями сообщений. В приложении-чате отправителями сообщение отправляется, получателями — получается.
Как сообщению попасть к моему другу, а не случайному человеку в другой группе? Это сложная часть.
📌 Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🗺 Google maps scraper
Это Golang парсер, на основе фреймворка scrapemate который позволяет удобно парсить данные из Google Maps.
Он автоматизирует просмотр веб-страниц и позволяет извлекать: имя, адрес, номер телефона, URL-адрес веб-сайта, рейтинг и количество отзывов для каждого выбранного вами места.
Все данные сохраняются в файл CSV для удобства анализа и обработки.
Содержит код для быстрого запуска с использованием Docker.
▪Github
@Golang_google
Это Golang парсер, на основе фреймворка scrapemate который позволяет удобно парсить данные из Google Maps.
Он автоматизирует просмотр веб-страниц и позволяет извлекать: имя, адрес, номер телефона, URL-адрес веб-сайта, рейтинг и количество отзывов для каждого выбранного вами места.
Все данные сохраняются в файл CSV для удобства анализа и обработки.
Содержит код для быстрого запуска с использованием Docker.
▪Github
@Golang_google
Goblin позволяет использовать команду curl для установки бинарников Go без самого Go.
Инструмент позволяет устанавливать бинарные файлы Go, указывая желаемую версию и другие параметры.
Это особенно полезно, если вы хотите быстро установить библиотеку без установки всего Go SDK.
curl -sf http://goblin.run/<package>[@version] | [...options] sh
Ставь 👍, если пользовался, только старым Go Binaries.
•Проект
•Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨 Awesome Software Architecture
Полезный список статей и ресурсов для изучения и применения на практике архитектуры, паттернов и принципов программного обеспечения.
https://awesome-architecture.com/
@Golang_google
Полезный список статей и ресурсов для изучения и применения на практике архитектуры, паттернов и принципов программного обеспечения.
https://awesome-architecture.com/
@Golang_google
🟡 Дайджест полезных материалов из мира Golang за неделю
Почитать:
— Expr: простой и мощный ЯП на Go
— Можем ли мы сохранить животных с помощью Golang?
— Из кладовщика в разработчики
— Понимание паттерна Options в Go
— Список популярных утечек с GitHub: Анализ репозиториев компаний
— How to build a URL Shortener with Go
— Channels in Go
— Golang Database Migration With Golang Migrate and Sqlc
— What are interfaces in Go?
— Introducing Goctopus: open-source, state-of-the-art GraphQL endpoint discovery & fingerprinting tool.
— Limitar Gorutinas Con Semáforos
— Pratique com APIs de verdade - ClimaTempo
— Non-blocking sequential processing in Go using infinite (unbounded) buffered channel
— Caching Git Repos: A Deep Dive into OpenSauced’s ‘Pizza Oven’ Service
— Testing with AWS SDK for Go V2 without interface mocks
❓Quiz
Посмотреть:
🌐 Уроки Golang с нуля /#21 - iota/ паттерн перечисления
🌐 Go 1.21 RELEASED!!!! | Prime News
🌐 Второй этап Golang собеса на 950к в месяц
Хорошего дня!
❤️ Лайк, если полезно
@Golang_google
Почитать:
— Expr: простой и мощный ЯП на Go
— Можем ли мы сохранить животных с помощью Golang?
— Из кладовщика в разработчики
— Понимание паттерна Options в Go
— Список популярных утечек с GitHub: Анализ репозиториев компаний
— How to build a URL Shortener with Go
— Channels in Go
— Golang Database Migration With Golang Migrate and Sqlc
— What are interfaces in Go?
— Introducing Goctopus: open-source, state-of-the-art GraphQL endpoint discovery & fingerprinting tool.
— Limitar Gorutinas Con Semáforos
— Pratique com APIs de verdade - ClimaTempo
— Non-blocking sequential processing in Go using infinite (unbounded) buffered channel
— Caching Git Repos: A Deep Dive into OpenSauced’s ‘Pizza Oven’ Service
— Testing with AWS SDK for Go V2 without interface mocks
❓Quiz
Посмотреть:
🌐 Уроки Golang с нуля /#21 - iota/ паттерн перечисления
🌐 Go 1.21 RELEASED!!!! | Prime News
🌐 Второй этап Golang собеса на 950к в месяц
Хорошего дня!
❤️ Лайк, если полезно
@Golang_google
Pattern Matching библиотека для Go.
Pattern Matching - метод анализа и обработки структур данных, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM