Обзор альтернатив стандартной библиотеке для регулярных выражений в Go с бенчмарками по скорости и потребляемой памяти.
🔗 Читать
🔗 Читать
🔥21
⚒ fp-go — библиотека функционального программирования для Go, идея для разработки которой взята из проекта fp-ts. Цель библиотеки — предоставить набор типов данных и функций, которые позволяют легко и увлекательно писать поддерживаемый и тестируемый код на Go.
💡На скриншоте — статистика проекта за последние 28 дней. Выводы сделаете сами.
🔗 GitHub
💡На скриншоте — статистика проекта за последние 28 дней. Выводы сделаете сами.
🔗 GitHub
👍11🥱5🤔3
#tip #go #security
Два способа проверить свой код на наличие уязвимостей
📌Инструмент govulncheck, безусловно, является универсальным для сканирования репозиториев на наличие известных уязвимостей.
🔸Инструмент использует официальную базу данных уязвимостей Go vuln.go.dev, всеобъемлющий источник известных уязвимостей в общедоступных модулях Go.
🔸Govulncheck можно использовать в командной строке или как часть рабочего процесса CI.
📌Еще одним инструментом, заслуживающим внимания, является gosec: Golang Security Checker.
🔸gosec — CLI-инструмент, который может быть интегрирован в пайплайн CI. В дополнение к этому, gosec входит в состав golangci-lint.
🔸По умолчанию он отключен, и вы можете включить либо все проверки на уязвимости, либо только определенные из них. Таким образом, ваш код проверяется на наличие уязвимостей каждый раз, когда ваша IDE запускает линтер.
🔸В отличие от govulncheck, gosec не проверяет наличие известных уязвимостей в общедоступном коде Go. Скорее, он проверяет код на соответствие списку уязвимых шаблонов программирования, включая: жестко закодированные учетные данные, непроверенные ошибки, построение SQL-инструкций с использованием fmt и т.д.
Два способа проверить свой код на наличие уязвимостей
📌Инструмент govulncheck, безусловно, является универсальным для сканирования репозиториев на наличие известных уязвимостей.
🔸Инструмент использует официальную базу данных уязвимостей Go vuln.go.dev, всеобъемлющий источник известных уязвимостей в общедоступных модулях Go.
🔸Govulncheck можно использовать в командной строке или как часть рабочего процесса CI.
📌Еще одним инструментом, заслуживающим внимания, является gosec: Golang Security Checker.
🔸gosec — CLI-инструмент, который может быть интегрирован в пайплайн CI. В дополнение к этому, gosec входит в состав golangci-lint.
🔸По умолчанию он отключен, и вы можете включить либо все проверки на уязвимости, либо только определенные из них. Таким образом, ваш код проверяется на наличие уязвимостей каждый раз, когда ваша IDE запускает линтер.
🔸В отличие от govulncheck, gosec не проверяет наличие известных уязвимостей в общедоступном коде Go. Скорее, он проверяет код на соответствие списку уязвимых шаблонов программирования, включая: жестко закодированные учетные данные, непроверенные ошибки, построение SQL-инструкций с использованием fmt и т.д.
pkg.go.dev
govulncheck command - golang.org/x/vuln/cmd/govulncheck - Go Packages
Govulncheck reports known vulnerabilities that affect Go code.
👍6🔥1
🤔Надеемся, материалы про пакет slog в Go вам еще не надоели. Потому что самое время закрепить представленную ранее теорию интересной практикой на примере создания красивого логгера.
😎Если кто-то из вас уже знаком с пакетом zap от Uber, вы быстро найдете общий язык с slog👇
🔍Создаем красивый обработчик логов для CLI, который делает логи намного читабельнее, используя только стандартную библиотеку. С цветами, отступами и всем, что нужно для удобства.
⚡️Есть еще кое-что. В официальном репозитории Go есть руководство по написанию обработчиков slog — сохраняйте себе в заметки.
😎Если кто-то из вас уже знаком с пакетом zap от Uber, вы быстро найдете общий язык с slog👇
🔍Создаем красивый обработчик логов для CLI, который делает логи намного читабельнее, используя только стандартную библиотеку. С цветами, отступами и всем, что нужно для удобства.
⚡️Есть еще кое-что. В официальном репозитории Go есть руководство по написанию обработчиков slog — сохраняйте себе в заметки.
👍25🥱1
6_Tips_on_High_Performance_Go_—_Advanced_Go_Topics_by_David_Lee.pdf
4.6 MB
6 советов, которые помогут диагностировать и устранять проблемы с производительностью: быстрое введение для Go-разработчика
1⃣ Бенчмаркинг
2⃣ Профилирование
3⃣ Оптимизация компилятора
4⃣ Inlining
5⃣ Escape Analysis
6⃣ Конкурентность
🔗 Читать (pdf-файл для тех, у кого не открывается Medium)
1⃣ Бенчмаркинг
2⃣ Профилирование
3⃣ Оптимизация компилятора
4⃣ Inlining
5⃣ Escape Analysis
6⃣ Конкурентность
🔗 Читать (pdf-файл для тех, у кого не открывается Medium)
👍6🥱1
🤔🚀Особенности и полезные приемы Go
Вы можете быть продуктивным Go-разработчиком, не зная и не используя большинство из этих приемов, но некоторые из них могут быть полезны:
▪️Declaration, control flow, typesystem
▪️Concurrency, unsafe, reflect
▪️Arrays, validation, build constraints
Вы можете быть продуктивным Go-разработчиком, не зная и не используя большинство из этих приемов, но некоторые из них могут быть полезны:
▪️Declaration, control flow, typesystem
▪️Concurrency, unsafe, reflect
▪️Arrays, validation, build constraints
🔥10👍1
#холивар
Не так давно мы спрашивали вас про пет-проекты, из чего получился неплохой холивар.
💬Главный вопрос с нашей стороны остался в стороне: «Возможно ли завершить такой проект? Если да, то как вы это сделали?».
🤔Ведь постоянно (особенно перед сном) приходят мысли что-то доработать, добавить новый функционал.
Не так давно мы спрашивали вас про пет-проекты, из чего получился неплохой холивар.
💬Главный вопрос с нашей стороны остался в стороне: «Возможно ли завершить такой проект? Если да, то как вы это сделали?».
🤔Ведь постоянно (особенно перед сном) приходят мысли что-то доработать, добавить новый функционал.
Telegram
Библиотека Go разработчика | Golang
Каждый разработчик пишет или планирует писать пет-проект, ведь в нем можно реализовать все свои задумки. В пет-проекте нет дедлайнов, продактов, тимлидов. Одним словом, рай для разработчика.
💭 Вы пишите пет-проекты? Используете для них Go или другой язык?…
💭 Вы пишите пет-проекты? Используете для них Go или другой язык?…
❤5👍2
Go 1.21: все, что вам нужно знать
Визуальный путеводитель в виде доски Miro по наиболее важным аспектам Go 1.21. Существуют также для предыдущих версий Go 1.20 и 1.18.
Визуальный путеводитель в виде доски Miro по наиболее важным аспектам Go 1.21. Существуют также для предыдущих версий Go 1.20 и 1.18.
miro.com
Go 1.21 All You Need to Know
All you need to know about the Go release Go 1.20 with all major features.
🔥9⚡3❤3
#tip
Колхозный, но для кого-то может и интересный совет: пишем shell-скрипты на Go
Сверхбыстрый компилятор Go заставляет Go чувствовать себя почти как скриптовый язык (на этапе компиляции, конечно; во время выполнения Go легко опережает любой интерпретируемый язык).
А как на счет того, чтобы запускать файл .go как shell-скрипт? Без использования
Когда скрипт с шебангом (#!) выполняется как программа в Unix-подобных ОС, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора, например:
После сохранения этого фрагмента в файл scriptname и изменения прав, вы можете вызвать его как ./scriptname или переместить в директорию в вашем $PATH и вызвать, как бинарный файл.
К сожалению, шебанг не работает для исходных файлов Go. Для большинства скриптовых языков символ "#" используется в качестве комментария. В Go это недопустимый синтаксис.
Но решение есть. Этот хитрый способ превращает .go файл в shell-скрипт в большинстве Unix-подобных ОС:
Если вы сохраните этот фрагмент в файл filename.go и сделаете исполняемым, вы сможете вызвать скрипт как ./filename.go.
📌Как это работает?
Команда env ищет go по пути и выполняет его, устраняя необходимость использования жестко закодированный путь к бинарю.
Путь к env начинается с трех косых черт. Таким образом, вся строка выглядит как комментарий. В то же время путь является допустимым синтаксисом оболочки.
Технически, двух косых черт может быть достаточно, но три косые черты более соответствуют стандартам — они всегда интерпретируются как одна косая черта.
Если env находит go по пути, он вызывает
Первая переменная $0 относится к самому файлу скрипта, а $@ представляет дополнительные параметры, переданные скрипту в командной строке. Внутри Go-скрипта эти параметры доступны через os.Args[].
Happycoding scripting!
Колхозный, но для кого-то может и интересный совет: пишем shell-скрипты на Go
Сверхбыстрый компилятор Go заставляет Go чувствовать себя почти как скриптовый язык (на этапе компиляции, конечно; во время выполнения Go легко опережает любой интерпретируемый язык).
А как на счет того, чтобы запускать файл .go как shell-скрипт? Без использования
go run
и без необходимости помнить расположение .go файла?Когда скрипт с шебангом (#!) выполняется как программа в Unix-подобных ОС, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора, например:
#!/usr/bin/env awk -f
BEGIN { print "Don't Panic!" }
После сохранения этого фрагмента в файл scriptname и изменения прав, вы можете вызвать его как ./scriptname или переместить в директорию в вашем $PATH и вызвать, как бинарный файл.
К сожалению, шебанг не работает для исходных файлов Go. Для большинства скриптовых языков символ "#" используется в качестве комментария. В Go это недопустимый синтаксис.
#!/usr/bin/env go run "$0" "$@"
package main
import "fmt"
func main() {
fmt.Println("My first Go script")
}
Но решение есть. Этот хитрый способ превращает .go файл в shell-скрипт в большинстве Unix-подобных ОС:
///usr/bin/env go run "$0" "$@"; exit
package main
import "fmt"
func main() {
fmt.Println("My first Go script")
}
Если вы сохраните этот фрагмент в файл filename.go и сделаете исполняемым, вы сможете вызвать скрипт как ./filename.go.
📌Как это работает?
Команда env ищет go по пути и выполняет его, устраняя необходимость использования жестко закодированный путь к бинарю.
Путь к env начинается с трех косых черт. Таким образом, вся строка выглядит как комментарий. В то же время путь является допустимым синтаксисом оболочки.
Технически, двух косых черт может быть достаточно, но три косые черты более соответствуют стандартам — они всегда интерпретируются как одна косая черта.
Если env находит go по пути, он вызывает
go run $0 $@
.Первая переменная $0 относится к самому файлу скрипта, а $@ представляет дополнительные параметры, переданные скрипту в командной строке. Внутри Go-скрипта эти параметры доступны через os.Args[].
Happy
🔥31❤7👏7👍6🥱1
💡Залог успешного CLI-инструмента на Go — это удобство для пользователя, гибкость и постоянные улучшения. Именно таких принципов придерживается автор сегодняшнего руководства и нескольких CLI-проектов с открытым исходным кодом.
🚀Автор делится советами, полученными при написании CLI-проектов OpenFaaS, actuated, action-usage, arkade и k3sup, начиная с 2016 года.
📌Основные моменты:
▫️Начинайте с простой команды и постепенно расширяйте возможности CLI
▫️Используйте инструмент Cobra
▫️Постоянно улучшайте пользовательский опыт, минимизируя необходимость ввода лишних данных
▫️Управляйте токенами авторизации удобным способом, вдохновляясь другими инструментами
▫️Используйте различные форматы вывода для гибкости
▫️SSH может быть альтернативой HTTP для автоматизации
▫️Тщательно документируйте все команды
🔗Читать
🚀Автор делится советами, полученными при написании CLI-проектов OpenFaaS, actuated, action-usage, arkade и k3sup, начиная с 2016 года.
📌Основные моменты:
▫️Начинайте с простой команды и постепенно расширяйте возможности CLI
▫️Используйте инструмент Cobra
▫️Постоянно улучшайте пользовательский опыт, минимизируя необходимость ввода лишних данных
▫️Управляйте токенами авторизации удобным способом, вдохновляясь другими инструментами
▫️Используйте различные форматы вывода для гибкости
▫️SSH может быть альтернативой HTTP для автоматизации
▫️Тщательно документируйте все команды
🔗Читать
Actuated
How to develop a great CLI with Go
Alex shares his insights from building half a dozen popular Go CLIs. Which can you apply to your projects?
❤7👍5
#холивар
😎Первый проект в карьере разработчика — самый волнительный и запоминающийся.
💬А вы помните свои впечатления от первого проекта и стек, на котором он был написан? Как бы вы подошли к своему первому проекту с нынешним опытом?
😎Первый проект в карьере разработчика — самый волнительный и запоминающийся.
💬А вы помните свои впечатления от первого проекта и стек, на котором он был написан? Как бы вы подошли к своему первому проекту с нынешним опытом?
❤6
Серия руководств по работе с новым пакетом slices от Ardan Labs:
1️⃣Binary Search
2️⃣Clip, Clone и Compact
3️⃣Compare
4️⃣Contains, Delete и Equal
1️⃣Binary Search
2️⃣Clip, Clone и Compact
3️⃣Compare
4️⃣Contains, Delete и Equal
Ardan Labs
Slices Package: Binary Search
Ardan Labs is trusted by small startups and Fortune 500 companies to train their engineers and develop business software solutions and applications.
👍14❤7
#новости #чтопроисходит
📌Новости и обновления популярных инструментов: подборка для Go-разработчика
🔥 Perfectly Reproducible, Verified Go Toolchains: новая статья в блоге Go от Russ Cox
🔥 Soft Serve (автономный Git-сервер на базе Go от разработчиков Charm) теперь поддерживает Git LFS
👨🏫 VK Education открывает набор на бесплатные курсы по Go, Python и технической поддержке
🤔 proposal: slices: function for count specific value on slice
🤔 proposal: syscall/js: Add SetSymbol method on js.Value
🤔 proposal: net/http/pprof: respect timeouts set using http.ResponseController
🤔 proposal: os: add application data directory functions (i.e. os.UserDataDir and os.DataDir)
🤔 proposal: encoding: add AppendText and AppendBinary
• TinyGo 0.29.0 — Go-компилятор на базе LLVM для микроконтроллеров, WASM/WASI и CLI-инструментов. В новой версии среди прочего добавлена поддержка Go 1.21 и новой опции GOOS=wasip1.
• Excelize 2.8 — библиотека для чтения/записи файлов электронных таблиц Excel
• Wazero 1.5 — zero dependency WASM runtime для Go-разработчиков
• Toxiproxy 2.6 — TCP-прокси для имитации хаотичных сетевых условий
• FerretDB 1.9 — совместимая с MongoDB база данных на базе Postgres
• GoCV 0.34 — пакет для компьютерного зрения с использованием OpenCV 4+
• Roaring 1.5 — Go-версия структуры данных «Roaring bitmap»
• Fiber 2.49 — веб-фреймворк, вдохновленный Express
• pdfcpu 0.5 — библиотека обработки PDF-файлов, написанная на Go и поддерживающая шифрование
📌Новости и обновления популярных инструментов: подборка для Go-разработчика
• TinyGo 0.29.0 — Go-компилятор на базе LLVM для микроконтроллеров, WASM/WASI и CLI-инструментов. В новой версии среди прочего добавлена поддержка Go 1.21 и новой опции GOOS=wasip1.
• Excelize 2.8 — библиотека для чтения/записи файлов электронных таблиц Excel
• Wazero 1.5 — zero dependency WASM runtime для Go-разработчиков
• Toxiproxy 2.6 — TCP-прокси для имитации хаотичных сетевых условий
• FerretDB 1.9 — совместимая с MongoDB база данных на базе Postgres
• GoCV 0.34 — пакет для компьютерного зрения с использованием OpenCV 4+
• Roaring 1.5 — Go-версия структуры данных «Roaring bitmap»
• Fiber 2.49 — веб-фреймворк, вдохновленный Express
• pdfcpu 0.5 — библиотека обработки PDF-файлов, написанная на Go и поддерживающая шифрование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5❤2🤔1🥱1
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека питониста
Библиотека devops’a
Библиотека тестировщика
Библиотека пхпшника
💼Каналы с вакансиями
Вакансии по питону, Django, Flask
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity
Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека шарписта
Библиотека мобильного разработчика
Библиотека хакера
Библиотека питониста
Библиотека devops’a
Библиотека тестировщика
Библиотека пхпшника
💼Каналы с вакансиями
Вакансии по питону, Django, Flask
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии по C#, .NET, Unity
Вакансии по PHP, Symfony, Laravel
Вакансии по DevOps & SRE
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
👍6❤1🥱1
⚒ semgrep-go — набор правил для статического анализа кода Go, которые выявляют распространенные или потенциальные ошибки. В настоящее время поддерживаются semgrep и ruleguard.
$ semgrep -f path/to/semgrep-go/rule.yml .
$ semgrep -f path/to/semgrep-go/ .
$ ruleguard -c=0 -rules path/to/semgrep-go/ruleguard.rules.go ./
$ semgrep -f path/to/semgrep-go/rule.yml .
$ semgrep -f path/to/semgrep-go/ .
$ ruleguard -c=0 -rules path/to/semgrep-go/ruleguard.rules.go ./
GitHub
GitHub - dgryski/semgrep-go: Go rules for semgrep and go-ruleguard
Go rules for semgrep and go-ruleguard. Contribute to dgryski/semgrep-go development by creating an account on GitHub.
🔥8👍3
#tip
Когда вам нужно инициализировать большие структуры, легко случайно пропустить необходимое поле. Компилятор не выдаст ошибку!
Вместо этого он устанавливает всем неинициализированным полям их значения по умолчанию. Хотя такая особенность часто очень удобна, иногда может понадобиться, чтобы компилятор указывал на поля структуры, которые не были явно инициализированы.
Линтеры идут на помощь! Линтер exhauststruct проверяет, что структура была полностью инициализирована. Мета-линтер golangci-lint включает в себя этот линтер, поэтому если вы уже используете golangci-lint, вы легко можете включить exhauststruct.
Теперь структура может содержать поля, которые предполагается использовать как необязательные. Тогда линтер может выдавать ненужные предупреждения.
Если определение структуры находится под вашим контролем, вы можете избежать ложных срабатываний линтера, добавив тег поля структуры exhaustruct:"optional" к необязательному полю.
Следующая инициализация будет помечена как некорректная, потому что отсутствует volume:
Когда вам нужно инициализировать большие структуры, легко случайно пропустить необходимое поле. Компилятор не выдаст ошибку!
Вместо этого он устанавливает всем неинициализированным полям их значения по умолчанию. Хотя такая особенность часто очень удобна, иногда может понадобиться, чтобы компилятор указывал на поля структуры, которые не были явно инициализированы.
Линтеры идут на помощь! Линтер exhauststruct проверяет, что структура была полностью инициализирована. Мета-линтер golangci-lint включает в себя этот линтер, поэтому если вы уже используете golangci-lint, вы легко можете включить exhauststruct.
Теперь структура может содержать поля, которые предполагается использовать как необязательные. Тогда линтер может выдавать ненужные предупреждения.
Если определение структуры находится под вашим контролем, вы можете избежать ложных срабатываний линтера, добавив тег поля структуры exhaustruct:"optional" к необязательному полю.
type Shape struct {
Length int
Width int
volume int
Perimeter int `exhaustruct:"optional"`
}
Следующая инициализация будет помечена как некорректная, потому что отсутствует volume:
var b Shape = Shape{
Length: 5,
Width: 3,
}
GitHub
GitHub - GaijinEntertainment/go-exhaustruct: golang analyzer that finds structures with uninitialized fields
golang analyzer that finds structures with uninitialized fields - GaijinEntertainment/go-exhaustruct
👍32❤2🤔1
Мини-гайд об организации кода gRPC и protobuf в проекте на Go
Автор кратко рассматривает, как использовать protoc и плагины с правильным импортом и структурой проекта.
🔗 Читать
Автор кратко рассматривает, как использовать protoc и плагины с правильным импортом и структурой проекта.
🔗 Читать
🔥8👍4❤2🥱2