Używamy Go tam, gdzie PHP przestaje być właściwym narzędziem: usługi o wysokiej przepustowości, workery w tle, przetwarzanie sieciowe i oprogramowanie, które ma działać lekko. Go kompiluje się do pojedynczego binarka, a gorutyny czynią pracę współbieżną tanią — dlatego ciężka część NetPostPanel jest w nim napisana.
Co budujemy w Go
- Mikroserwisy AI — NetPostPanel realizuje orkiestrację providerów, retrieval RAG i filtrowanie semantyczne jako usługi Go, równolegle wywołujące LLM.
- Scrapery i pipeline'y danych — crawlery pobierające, parsujące i normalizujące treści w tempie niedostępnym dla workerów PHP.
- Wewnętrzne API i procesory webhooków — małe usługi obok monolitu Laravel, zdejmujące z niego zbędne obciążenie.
- Narzędzia CLI — importery, pomocniki deploymentu i narzędzia kompilowane do jednego binarka.
Jak to żyje obok PHP
Aplikacja Laravel robi to, w czym jest dobra — HTTP, autoryzacja, panel admina, billing. Usługi Go biorą współbieżność fan-out i ciężkie obliczenia. Komunikują się przez HTTP, kolejki i webhooki.
Fan-out w kilkunastu liniach
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)
}
Rzeczywisty wzorzec współbieżności za wywołaniami providerów w NetPostPanel — bez frameworka, tylko biblioteka standardowa.
Nasz kod Go jest celowo nudny: najpierw biblioteka standardowa, minimalne zależności, strukturalne logowanie, graceful shutdown, Dockerfile w zestawie. Jeśli masz rosnące wąskie gardło w PHP albo usługę, która powinna żyć poza monolitem — to dobry powód, żeby porozmawiać.