VulCode

Go: co w nim budujemy i dlaczego

Go wybieramy do usług, które mają działać na wielu maszynach i nigdy nie wymagać uwagi: agentów na węzłach, telemetrii, serwerów komunikatora i gier sieciowych.

Go na prawdziwych zrzutach

Projekty z tej strony na ekranach z portfolio i case studies, każdy z krótkim opisem i drogą do pełnego.

Pokój głosowy w Plazerze: uczestnicy rozmowy i czat obok

Plazer: centralka i serwer społeczności

WebSocket, WebRTC przez pion, PostgreSQL i Redis.

Serwer Minecraft w panelu Flaem: zużycie zasobów, konsola na żywo i gracze

Flaem: demon kontenerów

Fork Pterodactyl Wings zarządzający kontenerami Docker na węźle.

Monitoring VPS w panelu Flaem: wykresy procesora, pamięci, dysku i sieci

Flaem: telemetria

Magazyn próbek w pamięci z kilkoma rozdzielczościami i zapisem na dysk.

Kiedy Go, a kiedy coś innego

Technologia ma pasować do miejsca, w którym kod będzie działał, i do zespołu, który go przejmie. Ostateczny wybór zapada przy wycenie, razem z Tobą.

Wybieramy Go

Agenty na serwerach klientów

Agent VPS i demon kontenerów Flaem to pojedyncze pliki binarne bez środowiska uruchomieniowego. Wersję na inny system albo procesor buduje się z tego samego kodu, zmieniając zmienne przy kompilacji.

Usługi, które nie mogą zawisnąć

Pakiet context przenosi limit czasu przez kolejne wywołania, więc agent nie czeka w nieskończoność na usługę, która milczy. Gdy druga strona leży, agent wydłuża odstępy między próbami, zamiast zasypywać ją zapytaniami.

Połączenia na żywo i głos

Centralka i serwer społeczności Plazera trzymają połączenia WebSocket, a rozmowy głosowe prowadzą przez WebRTC w bibliotece pion. Każde połączenie to lekka gorutyna, a nie osobny wątek systemu.

Serwer, który klient stawia u siebie

Serwer społeczności Plazera uruchamia się jedną komendą z obrazu Dockera, razem z PostgreSQL i Redisem. Jeden program w Go łatwo postawić i zaktualizować na VPS-ie, w domu albo w sieci lokalnej.

Monitoring, który działa, gdy reszta leży

Pharos to jeden program w Go z wbudowaną bazą SQLite: sprawdza usługi po HTTP, TCP i TLS i prowadzi publiczną stronę statusu. Monitoring nie może zależeć od tego, co monitoruje, więc nie potrzebuje osobnej bazy ani usług obok.

Terraform i projekty już napisane w Go

Dostawca Terraform dla Flaem stoi na oficjalnym frameworku HashiCorp, który istnieje tylko w Go. Demon kontenerów to fork Pterodactyl Wings, a z Dockerem rozmawia przez jego oficjalnego klienta w Go.

Wybieramy coś innego

Panel z wieloma ekranami

Panele z formularzami, tabelami i wykresami piszemy w TypeScripcie i React. Aplikacja webowa Plazera rozmawia z centralką w Go przez API, a usługi w Go zajmują się danymi i połączeniami.

Kryptografia w przeglądarce

Go skompilowany do WebAssembly zabiera ze sobą cały swój runtime, więc moduł jest ciężki. Szyfrowanie Plazera jest w Ruście, z którego do przeglądarki trafia lekki moduł.

Rozliczenia w rdzeniu platformy

W Go pole, którego nikt nie ustawił, ma wartość zerową, więc brak kwoty po cichu staje się zerem. Rozliczenia Flaem są w Ruście, gdzie brak wartości trzeba obsłużyć jawnie.

Nadzór wielu procesów

Nieobsłużona panika w jednej gorutynie kończy cały program. Router na węzłach Flaem jest w Elixirze, bo nadzorca OTP restartuje tylko zepsutą część, a reszta działa dalej.

Bot albo skrypt, który często się zmienia

Boty Discord i skrypty porządkowe piszemy w Pythonie. Poprawkę wgrywa się bez kompilowania, a discord.py ma gotowe komendy ukośnikowe i panele.

Moduł do systemu rozliczeń hostingu

WHMCS, HostBill, Paymenter i Blesta ładują moduły tylko w PHP. Moduły Flaem dla tych systemów są w PHP i rozmawiają z platformą przez jej API.

Go w porównaniu, punkt po punkcie

Każda potrzeba w jednym wierszu, a obok siebie to, co w tej sprawie daje każda z dwóch kolumn.

PotrzebaGoRust

Agent na tysiącach maszyn

Prosty kod, szybka kompilacja
Też dobry, dłuższy start

Serwer WebRTC

Dojrzała biblioteka pion
Mniej gotowych narzędzi

Rozwój przez zmieniający się zespół

Łatwy do przejęcia
Wymaga doświadczenia

Rozliczenia i kwoty

Wartości zerowe trzeba pilnować testami
Brak wartości obsłużony jawnie w typie

Czas kompilacji

Krótki nawet w dużym projekcie
Wyraźnie dłuższy

Kryptografia w przeglądarce

Ciężki moduł z całym runtime
Lekki moduł WebAssembly

Dostawca Terraform

Oficjalny framework HashiCorp
Tylko nieoficjalne biblioteki

Go w całym naszym kodzie

Ile linii napisaliśmy w Go i jaką część wszystkiego, co napisaliśmy, to stanowi. Liczymy linie dodane w commitach naszych repozytoriów, osobno dla każdego języka.

285 889
linii napisanych w Go
5,3%
wszystkich linii, które napisaliśmy
13
repozytoriów z kodem w Go
3.
miejsce wśród 26 języków

Biblioteki, na których stoją te projekty

Z plików zależności naszych repozytoriów. Przy każdej jedno zdanie o tym, do czego jej używamy.

Udostępnianie ekranu w Plazerze: wspólna mapa trasy i lista osób w rozmowie
Rozmowa szyfrowana end-to-end w aplikacji Plazer na telefonie
  • pion/webrtc

    Głos i wideo w Plazerze.

  • go-chi, coder/websocket

    HTTP i WebSocket centralki.

  • pgx, go-redis, goose

    PostgreSQL, Redis i migracje.

  • docker/docker

    Sterowanie kontenerami na węźle.

  • gRPC i protobuf

    Kontrakty między rdzeniem a węzłami.

  • terraform-plugin-framework

    Dostawca Terraform.

Nasze zmiany w cudzych projektach w Go

33 przyjęte zmiany w 21 repozytoriach. Opiekunowie tych projektów przejrzeli nasz kod i włączyli go do swojego.

Tydzień po tygodniu

Udział języków w naszych zmianach

Inne technologie i gdzie działa ich kod

Każda ma swoją stronę z projektami na prawdziwych ekranach i porównaniem z alternatywami.

Strony i aplikacje webowe

To, co widać w przeglądarce, i jego zaplecze.

Aplikacje mobilne

Natywne klienty Android i iOS.

Aplikacje desktopowe

Programy na Windows, macOS i Linux bez przeglądarki w środku.

Backend i infrastruktura

Rdzenie, agenty na serwerach i usługi czasu rzeczywistego.

Boty i automatyzacje

Discord, skrypty i monitoring.

Pytania o Go

Odpowiedzi o Go, naszych projektach i liczbach na tej stronie.

Projekt w Go?

Opisz, co chcesz zbudować. Odpiszemy w godzinę i powiemy wprost, czy ta technologia jest dobrym wyborem.