Эта статья содержит бесплатные онлайн-курсы по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera, так же мы порекомендуем вам полезные телеграм каналы для изучения Go.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Пакет с Набором тривиальных функций, которые могут упростить жизнь при написание кода.
go get github.com/samber/lo@v1
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Начнем с простой задачи
Where my anagrams at?
Что такое анаграмма?
Aнаграмма – перестановка букв в слове или словосочетании, вследствие чего возникает другое слово или словосочетание. Два слова являются анаграммами друг друга, если они оба содержат одни и те же буквы.
Нппример:
'abba' & 'baab' == true
'abba' & 'bbaa' == true
'abba' & 'abbba' == false
'abba' & 'abca' == false
Напишите функцию, которая найдет все анаграммы слова из списка. Вам будет дано слово и массив со словами. Вы должны вернуть массив всех анаграмм для этого слова или пустой массив, если их нет. Например:
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']
anagrams('laser', ['lazing', 'lazy', 'lacer']) => []
Решение:
package kata
import (
"sort"
)
type Word string
type Words []string
func Anagrams(word string, words []string) []string {
sorted := Word(word).Sorted()
areAnagrams := func(b Word) bool {
return sorted == b.Sorted()
}
return Words(words).Filter(areAnagrams)
}
func (ctx Word) Sorted() Word {
sorted := []rune(ctx)
sort.SliceStable(sorted, func(i, j int) bool {
a := sorted[i]
b := sorted[j]
return a < b
})
return Word(sorted)
}
func (ctx Words) Filter(predicate func(x Word) bool) Words {
var filtered Words
for _, x := range ctx {
if predicate(Word(x)) {
filtered = append(filtered, x)
}
}
return filtered
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Последняя цифра огромного числа
Для данного списка
{x1, x2, x3, ..., xn}
вычислить последнюю (десятичную) цифруx1 ^ (x2 ^ (x3 ^ (... ^ xn)))
.Примеры
Пример 1
LastDigit([]int{3, 4, 2})
// должно вернуть 1потому что
3 ^ (4 ^ 2) = 3 ^ 16 = 43046721
Примечания
Прогрессия растет невероятно быстро. Например,
9 ^ (9 ^ 9)
имеет более 369 миллионов цифр. LastDigit должен эффективно обрабатывать такие числа.0 ^ 0 = 1
0 ^ (0 ^ 0) = 0 ^ 1 = 0
Пустой список следует рассматривать как равный 1
Решение
package src
func LastDigit(as []int) int {
if len(as) == 0 {
return 1
}
for key := len(as) - 1; key > 0; key-- {
if as[key] == 0 {
as[key-1] = 1
as = as[:key]
continue
} else if as[key] == 1 {
as = as[:key]
continue
}
if as[key-1]%10 == 2 || as[key-1]%10 == 3 || as[key-1]%10 == 7 || as[key-1]%10 == 8 {
switch as[key] % 4 {
case 0:
as[key-1] = pow(as[key-1], 4)
case 1:
as[key-1] = pow(as[key-1], 5)
case 2:
as[key-1] = pow(as[key-1], 6)
case 3:
as[key-1] = pow(as[key-1], 7)
}
} else if as[key-1]%10 == 4 || as[key-1]%10 == 9 || as[key-1]%10 == 1 {
switch as[key] % 2 {
case 0:
as[key-1] = pow(as[key-1], 2)
case 1:
as[key-1] = pow(as[key-1], 3)
}
} else if as[key-1]%10 == 5 {
as[key-1] = 25
} else if as[key-1]%10 == 6 {
as[key-1] = 36
} else if as[key-1]%10 == 0 {
as[key-1] *= as[key-1]
}
as = as[:key]
}
return as[0] % 10
}
func pow(a, b int) int {
result := getDigs(a)
for i := 1; i < b; i++ {
result = getDigs(result * a)
}
return result
}
func getDigs(a int) int {
if a > 1000 {
return a % 1000
}
return a
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
DiscordGo — это пакет Go, который обеспечивает низкоуровневую привязку к API-интерфейсу клиента чата Discord. DiscordGo почти полностью поддерживает все методы API Discord, интерфейс веб-сокеты и голосовой интерфейс.
go get github.com/bwmarrin/discordgo
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Лучшие бесплатные книги Golang 2023.
Есть много доступных книг по GO, некоторые полезные, некоторые не очень. Я думаю, что если вы изучаете Go, вы должны стремиться читать как можно больше книг.
✔️ Смотреть список
@Golang_google
Есть много доступных книг по GO, некоторые полезные, некоторые не очень. Я думаю, что если вы изучаете Go, вы должны стремиться читать как можно больше книг.
✔️ Смотреть список
@Golang_google
— встроенной базы данных SQLite + realtime subscriptions,
— удобной панели администратора,
— встроенного управления файлами и пользователями,
— и удобного REST-API.
✔️ Документация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:
Задача
Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:
▪ Создать новое голосование с разными вариантами ответов
▪ Отдать свой голос за какой-либо вариант
▪ Получить текущий результат голосования
Реализовать методы:
- POST /api/createPoll/ создать голосование c вариантами ответов
- POST /api/poll/ проголосовать за конкретный вариант: <poll_id, choice_id>
- POST /api/getResult/ получить результат по конкретному голосованию: <poll_id>
Структура и формат входных и выходных данных на ваше усмотрение.
Описание идеального решения
▪ Задание декомпозировано, составлен иерархический список работ. Каждый пункт из этого списка может быть реализован за небольшое время.
▪ Составлена схема архитектуры со всеми сущностями и их связями в Miro
▪ Код слабо связан, функции не имеют побочных эффектов
▪ История коммитов осмысленная. По ней видно, в каком порядке решалась задача.
▪ Покрытие тестами >70%
Требования
▪Язык: Go
▪Результаты голосования должны храниться в базе данных. Мы обычно используем PostgreSQL и MongoDB, но можно выбрать любую другую.
▪Код нужно выложить на github (просьба не делать форк этого репозитория, чтобы не плодить плагиат)
▪Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker-compose up
▪Сервис должен отвечать на 8000 порту
Усложнения
▪ Написаны тесты (постарайтесь достичь покрытия в 70% и больше)
▪ Опишите, как изменится архитектура, если мы ожидаем большую нагрузку (Реализация не требуется)
▪ Опишите, как можно защититься от накруток (Реализация не требуется)
▪ Попробуйте оценить, какую нагрузку в RPS сможет выдержать ваш сервис
Что будет оцениваться
▪ Декомпозиция задачи (например, в виде вложенного списка подзадач)
▪ Архитектура решения
▪ Корректность реализации
▪ Подход к тестированию
▪ Понятность инструкций и документации
▪ Codestyle
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
conc — это ваш набор инструментов для структурирования конкуренции в Go, который делает обычные задачи проще и безопаснее.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
git clone [email protected]:mikestefanello/pagoda.git
cd pagoda
make up
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevOps
Я помню свой третий demo-проект. После сборки и тестирования проекта всё работало. В тот момент я отправил его человеку, который должен был демонстрировать его вместо меня. И вот, не задача, во время запуска возникла ошибка...
Чтобы сохранить собственную репутацию, я начал производить отладку. Проект не запускался потому, что тому человеку нужно было обновить программное обеспечение, чтобы у него работали новые функции. Я помог ему в этом, и, о чудо, всё заработало!
А теперь представьте, если бы мне нужно было разослать данный проект не одному человеку, а десятерым. Тогда мне пришлось бы помогать каждому, перенастраивать их компьютеры, чтобы новые функции успешно работали. Думаю, я бы испытал огромный стресс…
Было бы отлично, если бы существовало такое ПО, с помощью которого можно было бы упаковать всё необходимое для работы приложения в одном месте, а потом поделиться этим файлов с коллегами. Они бы скачивали файл и запускали его, при этом не получая ошибку. Но ведь такая программа существует! И называется она Docker.
Docker помогает решать эти проблемы. В этой статье объясняются основные концепции Docker, а также показано то, как создавать контейнеры для ваших приложений.
➡️ Читать дальше
@DevOPSitsec
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Инструмент Go, который позволяет безопасно передавайть и отправлять что угодно между компьютерами с помощью TUI.
brew install abdfnx/tap/tran
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое чудесное платье! Стоит только поискать платья в веб-пространстве, как потом практически невозможно избежать интернет-рекламы с новыми моделями. Что же происходит при нажатии на такие коммерческие предложения? Мы попадаем на сайт магазина, где представлена подробная информация о товаре. Но вот вопрос: эти данные поступают из одного и того же сервиса или собираются из разных сервисов и отправляются пользователям? В статье мы рассмотрим второй вариант, а именно шлюз API.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример Go проекта с чистой архитектурой на базе Gin, mongo go driver, JWT viper, bcrypt, testify, mockery и других пакетов.
Вы можете использовать этот проект в качестве шаблона для создания вашего проекта на Go.
$ cd your-workspace
# Clone this project into your workspace
$ git clone https://github.com/amitshekhariitbhu/go-backend-clean-architecture.git
# Move to the project root directory
$ cd go-backend-clean-architecture
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
https://groups.google.com/g/golang-announce/c/7SPnPbP2DTU?pli=1
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека планировщика заданий с поддержкой базы данных
go get github.com/deepaksinghvi/cdule
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Расширение GitHub (gh) CLI для автоматизации повседневной работы с ветками, коммитами и запросами на GO.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳🚢 Docker-Kubernetes-101
Инструкция и подход к развертыванию проектов с использованием Docker и Kubernetes.
🖥 Github
@Golang_google
Инструкция и подход к развертыванию проектов с использованием Docker и Kubernetes.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
WebPty - проект на Go, который позволяет запускать серверный терминал из браузера. Работает с любого Linux-сервера с любой программой.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Текст задания:
Процессу на stdin приходят строки, содержащие интересующие нас URL. Каждый такой URL нужно дернуть и посчитать кол-во вхождений строки "Go". В конце работы приложение выводит на экран общее кол-во найденных строк "Go" во всех переданных URL, например:
$ echo -e 'https://golang.org\nhttps://golang.org\nhttps://golang.org' | go run 1.go
Count for https://golang.org: 9
Count for https://golang.org: 9
Count for https://golang.org: 9
Total: 27
Введенный URL должен начать обрабатываться сразу после вычитывания и параллельно с вычитыванием следующего. URL должны обрабатываться параллельно, но не более k=5 одновременно.
Обработчики url-ов не должны порождать лишних горутин, т.е. если k=1000 а обрабатываемых URL-ов нет, не должно создаваться 1000 горутин.
Нужно обойтись без глобальных переменных и использовать только стандартные библиотеки.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM