1
сделаем это пост полезным - выкладывайте в комментариях свои проекты, код, наработки, лучшие попадут в подборку.
сделаем это пост полезным - выкладывайте в комментариях свои проекты, код, наработки, лучшие попадут в подборку.
Пакет Go Mongo, поддерживающий операции по работе с документами и эффективным компоновщиком данных BSON с использованием различных типов данных.
BSON - бинарная форма представления простых структур данных и ассоциативных массивов (которые в контексте обмена называют объектами или документами)
go get github.com/chenmingyong0423/go-mongox
#golang #MongoDB
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
go-daemon
:какой лимит по умолчанию на количество открытых дескрипторов файла в Go? Как его менять? И есть ли общепринятые рекомендации по их количеству?
ulimit -a
и ulimit -aH
в shell'е перед запуском вашего демона. Это быстро покажет текущие "мягкие" и (второй вызов) "жесткие" ограничения. При помощи ulimit
можно открутить мягкие ограничения до пределов жестких. Следует понимать, что ulimit
меняет только текущие лимиты, для шелла и всех программ, запущенных в этом шелле, поэтому после завершения сессии или даже в другом окне терминала значения останутся прежними./etc/security/limits.conf
и каталог /etc/security/limits.d/
, ограничение называется nofile
. Редактировать (а, иногда, и смотреть) эти файлы может только суперпользователь ("root"). Там задаются ограничения на отдельных пользователей или группы, применяемые на всю сессию данного пользователя, или всех пользователей определенной группы.sysctl
- это fs.nr_open
:/sbin/sysctl -n fs.nr_open
ему же соответствует файл
/proc/sys/fs/nr_open
getrlimit
/setrlimit
, которые можно звать из Go, используя FFI (примеры можно посмотреть здесь)@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная идея — отделить интерфейс хранилища данных от его реализации. Тогда мы можем использовать различные реализации хранилища, обладающие одним интерфейсом
entity
/user
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная цель этого шаблона, кроме обучения — это снизить время на прототипирование небольших серверных задач на Go.
Шаблон включает в себя:
На изображении — UML-диаграмма последовательности запуска и остановки сервера
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
./goprogram
1 29.06.2099 14:10
./goprogram
2 29.06.2099 14:12
./goprogram
3 29.06.2099 15:10
./goprogram
4 30.06.2099 14:10
При этом ни каких дополнительных файлов или записей не должно создаваться.
На Purebasic довольно просто такое реализовать:
• Скомпилированный бинарный файл создаёт свою копию.
• Записывает в конец файла число.
• Замещает оригинал изменённой копией.
• При повторном запуске выводит записанное число.
• Можно пример такой реализации на Go?
type persistent struct {
Magic [8]byte
Content int64
}
var p = persistent{
Magic: [8]byte{0xBA, 0xDD, 0xFA, 0xCE, 0xBE, 0xEF, 0xCA, 0xCE},
Content: 0,
}
func main() {
fmt.Println(p.Content)
const size = int(unsafe.Sizeof(p))
currentBuf := bytes.NewBuffer(make([]byte, 0, size))
err := binary.Write(currentBuf, binary.LittleEndian, p)
newP := p
newP.Content++
newBuf := bytes.NewBuffer(make([]byte, 0, size))
err = binary.Write(newBuf, binary.LittleEndian, newP)
currentBytes, newBytes := currentBuf.Bytes(), newBuf.Bytes()
self, err := os.OpenFile(os.Args[0], os.O_RDONLY, 0755)
selfBytes, err := ioutil.ReadAll(self)
i := bytes.Index(selfBytes, currentBytes)
copy(selfBytes[i:i+size], newBytes)
newSelf, err := ioutil.TempFile("", "selfmodifying")
_, err = newSelf.Write(selfBytes)
err = os.Rename(newSelf.Name(), self.Name())
err = os.Chmod(self.Name(), 0755)
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Вот задача — дано изображение в виде слайса байт, в которое нужно добавить метаинформацию вроде заголовков exif.
Практиески все библиотеки на Go дают возможно считать метаинформацию из файла, но не записать.
Благо, есть такая библиотека
go-exif
, которая умеет править или создавать новые exif-блоки: Немного подробностей про
go-exif
:@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструмент для анализа размера зависимостей в скомпилированных бинарных файлах
Go.
• Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Предлагает массу вариантов работы с pdf:
• аннотирование
• создание pdf с помощью json
• извлечение изображений, текста и т.д.
• объединение нескольких pdf
• поворот, изменение размера
Отличный инструмент для pdf, да и в плане демонстрации возможностей Go тоже — исходный код открыт, можно форкать, добавлять свои возможности
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю
Инструменты недели:
📌 go-size-analyzer - инструмент для анализа размера зависимостей в скомпилированных бинарных файлах
Go.
📌 Go-mongox - пакет Go Mongo, поддерживающий операции по работе с документами и эффективным компоновщиком данных BSON с использованием различных типов данных.
📌Dendy - это эмулятор NES/Famicom, написанный на Go и названный в честь советского клона Famicom, который был у многих в детстве.
📌 The Gowebly CLI - инструмент интерфейса командной строки, который упрощает создание Go приложений на серверной части.
Почитать:
— Fuzzing-тестирование. Практическое применение
— Почему теряются поля при конвертации?
— Бойлерплейт как инструмент стандартизации Go-проектов
— Как добавить метаданные в изображение?
— Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)
— Шаблон backend сервера на Go
— Использование миграций баз данных в Go
— My weekly dev.to recommendations
— What’s New in Go 1.22: cmp.Or
— Golang in-memory key-value pair cache
— Golang generator functions (Experimental in 1.22)
— From Homemade HTTP Router to New ServeMux
— (Part 5)Golang Framework Hands-on - KisFlow Stream Computing Framework-Function Scheduling
— Go Program pattern 04:Map-Reduce
— Live reload em Go com docker e compile daemon
— Go program pattern 05 : Decorations
— Go program pattern 03:Inversion of Control
— Gin + Gorm Practical Guide, Implementing a Simple Q&A Community Backend Service in One Hour
— "The Two Reasons I Prefer Passing Struct Pointers Around"
Посмотреть:
🌐 Разработка полноценного распределенного хранилища файлов на Go (⏱ 9:57:00)
🌐 Why Golang's IO.READER Is More Important Than You Think (⏱ 06:38)
🌐 Расследуй убийство с SQL. Игры, которые реально учат писать код. (⏱ 03:52)
🌐 3 Important Use Cases Why The Industry Is Using Kafka (⏱ 07:52)
🌐 When Should You Pick NEOVIM Over VSCODE? (⏱ 01:00)
🌐 Ultimate Golang - HTMX - TEMPL - TAILWIND Project Template (⏱ 02:35:23)
🌐 DEPENDENCY INJECTION IN GOLANG? YEAH YIKES (⏱ 01:55:43)
🌐 Внутреннее устройство планировщика Go (⏱ 01:01:57)
Хорошего дня!
@Golang_google
Инструменты недели:
📌 go-size-analyzer - инструмент для анализа размера зависимостей в скомпилированных бинарных файлах
Go.
📌 Go-mongox - пакет Go Mongo, поддерживающий операции по работе с документами и эффективным компоновщиком данных BSON с использованием различных типов данных.
📌Dendy - это эмулятор NES/Famicom, написанный на Go и названный в честь советского клона Famicom, который был у многих в детстве.
📌 The Gowebly CLI - инструмент интерфейса командной строки, который упрощает создание Go приложений на серверной части.
Почитать:
— Fuzzing-тестирование. Практическое применение
— Почему теряются поля при конвертации?
— Бойлерплейт как инструмент стандартизации Go-проектов
— Как добавить метаданные в изображение?
— Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)
— Шаблон backend сервера на Go
— Использование миграций баз данных в Go
— My weekly dev.to recommendations
— What’s New in Go 1.22: cmp.Or
— Golang in-memory key-value pair cache
— Golang generator functions (Experimental in 1.22)
— From Homemade HTTP Router to New ServeMux
— (Part 5)Golang Framework Hands-on - KisFlow Stream Computing Framework-Function Scheduling
— Go Program pattern 04:Map-Reduce
— Live reload em Go com docker e compile daemon
— Go program pattern 05 : Decorations
— Go program pattern 03:Inversion of Control
— Gin + Gorm Practical Guide, Implementing a Simple Q&A Community Backend Service in One Hour
— "The Two Reasons I Prefer Passing Struct Pointers Around"
Посмотреть:
🌐 Разработка полноценного распределенного хранилища файлов на Go (⏱ 9:57:00)
🌐 Why Golang's IO.READER Is More Important Than You Think (⏱ 06:38)
🌐 Расследуй убийство с SQL. Игры, которые реально учат писать код. (⏱ 03:52)
🌐 3 Important Use Cases Why The Industry Is Using Kafka (⏱ 07:52)
🌐 When Should You Pick NEOVIM Over VSCODE? (⏱ 01:00)
🌐 Ultimate Golang - HTMX - TEMPL - TAILWIND Project Template (⏱ 02:35:23)
🌐 DEPENDENCY INJECTION IN GOLANG? YEAH YIKES (⏱ 01:55:43)
🌐 Внутреннее устройство планировщика Go (⏱ 01:01:57)
Хорошего дня!
@Golang_google
Неплохая статья, которая даёт понимание, как используется Go в бигтехе.
О чём?
Во всех golang-сервисах пишут тесты на свой код, которые в среднем гоняются на CI более 5 минут.
Поэтому автор подумал, что неплохо бы это всё ускорить — собственно, этим он и решил поделиться
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Devcards предоставляет интерактивную визуальную среду для Go, аналогичную REPLY и python ноутбукам, таким как Jupyter.
go install github.com/igorhub/devcard/cmd/devcards@latest
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
— Секция 1, системный минимум
— Секция 2, минимум по Go
— Секция 3, форматы данных
— Секция 4, базы данных
— Секция 5, сети
— Секция 6, брокеры, очереди сообщений
— Секция 7, инфраструктура и архитектура
— Секция 8, алгоритмы
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Открытый учебник по Go с упором на тестирование и test coverage
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM