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
Владимир Балун, старший разработчик в Яндекс, разбирает по полочкам задачу с Go-собеседования. Точнее, которую могут спросить на собеседовании.
👀 Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Ошибки, которые стоит избегать на собеседовании Go
Курсы по программированию: https://clck.ru/37iG2b
Потренироваться проходить собеседования: https://clck.ru/3C2CY3
Консультации:
https://getmentor.dev/mentor/vladimir-balun-191
https://solvery.io/ru/mentor/vladimir_balun
Таймкоды:
00:00 - Введение
00:08…
Потренироваться проходить собеседования: https://clck.ru/3C2CY3
Консультации:
https://getmentor.dev/mentor/vladimir-balun-191
https://solvery.io/ru/mentor/vladimir_balun
Таймкоды:
00:00 - Введение
00:08…
❤14🥱13👍2🔥2🤔2
Тестирование Go-приложений с использованием Dolt: пошаговый гайд по работе с Dolt Go Driver.
🔗 Читать
🔗 Читать
GitHub
GitHub - dolthub/driver: Golang database/sql driver for Dolt
Golang database/sql driver for Dolt. Contribute to dolthub/driver development by creating an account on GitHub.
👍3❤2
#холивар
🌟❓Привет, подписчики! Вспомните свой профессиональный путь и ответьте на пару вопросов:
💬На какой стадии вашей жизни вы приобрели самые ценные знания и навыки, которые стали ключевыми для карьеры в IT?
💬Было ли это ещё в школьные годы, во времена колледжа/университета/института, в процессе самообразования или уже прямо на рабочем месте?
📌И самое главное — какие это были знания и навыки?
Делитесь опытом в комментариях👇
🌟❓Привет, подписчики! Вспомните свой профессиональный путь и ответьте на пару вопросов:
💬На какой стадии вашей жизни вы приобрели самые ценные знания и навыки, которые стали ключевыми для карьеры в IT?
💬Было ли это ещё в школьные годы, во времена колледжа/университета/института, в процессе самообразования или уже прямо на рабочем месте?
📌И самое главное — какие это были знания и навыки?
Делитесь опытом в комментариях👇
❤4
#инструменты
☝️🚀 Базы данных для Go-разработчика: рейтинг за последние 28 дней
🔝 Топ-10:
1⃣ milvus-io/milvus
2⃣ prometheus/prometheus
3⃣ etcd-io/etcd
4⃣ pingcap/tidb
5⃣ cockroachdb/cockroach
6⃣ influxdata/influxdb
7⃣ dgraph-io/badger
8⃣ hashicorp/consul
9⃣ flower-corp/lotusdb
1⃣0⃣ FerretDB/FerretDB
☝️
1⃣ milvus-io/milvus
2⃣ prometheus/prometheus
3⃣ etcd-io/etcd
4⃣ pingcap/tidb
5⃣ cockroachdb/cockroach
6⃣ influxdata/influxdb
7⃣ dgraph-io/badger
8⃣ hashicorp/consul
9⃣ flower-corp/lotusdb
1⃣0⃣ FerretDB/FerretDB
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💯5🤔2
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🔥🕑 10 признаков того, что пора увольняться
«Быть или не быть?», «Уйти или остаться?»: делаем вдох-выдох и принимаем важное решение.
🔗 Читать статью
🔗 Зеркало
«Быть или не быть?», «Уйти или остаться?»: делаем вдох-выдох и принимаем важное решение.
🔗 Читать статью
🔗 Зеркало
👍2
🔐 Новые релизы включают исправления безопасности для cmd/go (CVE-2023-39320), html/template (CVE-2023-39318, CVE-2023-39319) и crypto/tls.
🔗 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13