Ми використовуємо Go там, де PHP перестає бути правильним інструментом: високонавантажені сервіси, фонові воркери, мережева обробка та софт, що має працювати легко. Go компілюється в один бінарник, а горутини роблять конкурентну роботу дешевою — саме тому важка частина NetPostPanel написана на ньому.
Що ми створюємо на Go
- AI-мікросервіси — NetPostPanel виконує оркестрацію провайдерів, RAG-ретривал і семантичну фільтрацію як Go-сервіси, що паралельно викликають LLM.
- Скрапери й пайплайни даних — краулери, які завантажують, парсять і нормалізують контент у темпі, недоступному PHP-воркерам.
- Внутрішні API та обробники вебхуків — маленькі сервіси поруч із Laravel-монолітом, що знімають з нього зайве навантаження.
- CLI-інструменти — імпортери, деплой-хелпери й утиліти, що компілюються в один бінарник.
Як це живе поруч із PHP
Laravel-застосунок робить те, у чому він сильний — HTTP, авторизація, адмінка, білінг. Go-сервіси беруть fan-out конкурентність і важкі обчислення. Спілкуються через HTTP, черги й вебхуки.
Паралельні виклики без зайвої складності
func fetchAll(ctx context.Context, urls []string) []Result {
results := make(chan Result, len(urls))
var wg sync.WaitGroup
for _, u := range urls {
wg.Add(1)
go func(url string) {
defer wg.Done()
results <- fetch(ctx, url)
}(u)
}
wg.Wait()
close(results)
return slices.Collect(results)
}
Реальний патерн конкурентності за викликами провайдерів у NetPostPanel — без фреймворку, лише стандартна бібліотека.
Наш Go-код навмисно нудний: стандартна бібліотека насамперед, мінімум залежностей, структуроване логування, graceful shutdown, Dockerfile у комплекті. Якщо у вас є вузьке місце в PHP, що росте, або сервіс, який має жити поза монолітом — це добрий привід поговорити.