❗Ищем копирайтера
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: hello@proglib.io
Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.
Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).
Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.
Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.
👉Присылайте свои резюме: hello@proglib.io
❤7👍3🥱1
#tip #go
Типичная ситуация: пакет
В Go для создания и DI требуется три шага без каких-либо фреймворков. Примеры псевдокодом👇
1️⃣ Пакет
Определите интерфейс в пакете
2️⃣ Пакет
Определите тип, который реализует интерфейс.
Подключите хранилище при создании документа. Предположим, что у нас есть объект приложения в
Типичная ситуация: пакет
document
не должен зависеть от пакета storage
, но типу document.Doc
нужен способ загрузки и сохранения содержимого.В Go для создания и DI требуется три шага без каких-либо фреймворков. Примеры псевдокодом👇
1️⃣ Пакет
document
Определите интерфейс в пакете
document
.type Storage interface {
Load(int) Content <i>// some content type</i>
Save(Content) int
}
Сделайте интерфейсную часть типа Doc, чтобы позже подключить фактическое хранилище.type Doc struct {
Cont Content
Store *Storage
}
Используйте этот интерфейс в функциях или методах, которые загружают или сохраняют содержимое документа.func (d *Doc) LoadById(id int, s Storage) {
d.Cont = d.Store.Load(id)
}
<i>// same for Save...</i>
2️⃣ Пакет
storage
Определите тип, который реализует интерфейс.
type DBStore struct {
db *database.DB
}
func (d *DBStore) Load(id int) Content {
<i>// ... load content by id</i>
}
<i>// same for Save...</i>
3️⃣ Пакет main
Подключите хранилище при создании документа. Предположим, что у нас есть объект приложения в
main
.App.Doc.Store = storage.NewDBStore(...)
🥱21🔥4👍3😁1🌚1
👀 Структурированное логирование с slog: взгляд команды Go
🔹Экскурсия по slog
🔹Производительность
🔹Проектирование пакета slog (одно из самых крупных дополнений к стандартной библиотеке с момента выпуска Go 1)
🔗 Читать
🔹Экскурсия по slog
🔹Производительность
🔹Проектирование пакета slog (одно из самых крупных дополнений к стандартной библиотеке с момента выпуска Go 1)
🔗 Читать
go.dev
Structured Logging with slog - The Go Programming Language
The Go 1.21 standard library includes a new structured logging package, log/slog.
❤5⚡1
#холивар
🤔Что самое трудное в работе программиста? Правильно, выдумывать имена для переменных.
💬Как вы считаете, насколько важен хороший нейминг для сущностей (функций, переменных и т.д.) в вашем коде? И есть ли у вас или в вашей команде общепринятые правила или лучшие практики, которым вы следуете при нейминге?
Если да, поделитесь опытом👇
🤔Что самое трудное в работе программиста? Правильно, выдумывать имена для переменных.
💬Как вы считаете, насколько важен хороший нейминг для сущностей (функций, переменных и т.д.) в вашем коде? И есть ли у вас или в вашей команде общепринятые правила или лучшие практики, которым вы следуете при нейминге?
Если да, поделитесь опытом👇
👍14🥱4🔥2
Рейтинг Go ORM за последние 28 дней: на заметку Go-разработчику
👍19🥱19🔥2
Как визуализировать модели GORM с помощью Atlas
Вдогонку к очень холиварному предыдущему посту ловите мини-гайд о том, как использовать новую фичу Atlas, которая позволяет разработчикам быстро создавать визуализации диаграммы «сущность-связь» (или ERD) схем баз данных.
В гайде показано, как эту функцию можно использовать в тандеме с одной из основных возможностей Atlas — «Загрузчиками схем» — для создания визуализаций моделей GORM.
Atlas — это независимый от языка инструмент для управления и миграции схем баз данных с использованием современных принципов DevOps.
Вдогонку к очень холиварному предыдущему посту ловите мини-гайд о том, как использовать новую фичу Atlas, которая позволяет разработчикам быстро создавать визуализации диаграммы «сущность-связь» (или ERD) схем баз данных.
В гайде показано, как эту функцию можно использовать в тандеме с одной из основных возможностей Atlas — «Загрузчиками схем» — для создания визуализаций моделей GORM.
Atlas — это независимый от языка инструмент для управления и миграции схем баз данных с использованием современных принципов DevOps.
👍18🤔1
Обзор альтернатив стандартной библиотеке для регулярных выражений в 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