Go, poznat i kao Golang, jeste programski jezik koji je Google razvio 2009. godine, sa ciljem da bude jednostavan, efikasan i posebno pogodan za konkurentno programiranje. Zahvaljujući minimalističkoj sintaksi, brzom kompajliranju i snažnoj podršci za umrežavanje, Go je postao omiljen izbor za izradu mrežnih servisa, API-ja i mikroservisnih arhitektura.
Ovaj članak pruža uvod u Go za početnike i uključuje praktičan tutorijal za kreiranje jednostavnog REST API-ja koristeći Gin radni okvir (framework).
Šta je Go?
Go je open-source programski jezik koji kombinuje najbolje elemente drugih jezika: performanse C-a, objektno-orijentisani pristup Jave i jednostavnost Pythona. Prema zvaničnoj dokumentaciji, Go je dizajniran da bude „jednostavan za izgradnju sigurnih i skalabilnih sistema”. Njegove ključne karakteristike uključuju:
-
Konkurentnost: Ugrađena podrška za gorutine (goroutines) i kanale omogućava efikasno upravljanje više zadataka istovremeno.
-
Jednostavnost: Minimalistička sintaksa smanjuje krivu učenja i olakšava održavanje koda.
-
Performanse: Kao kompajlirani jezik, Go generiše izuzetno efikasan mašinski kod, što rezultira brzim izvršavanjem.
-
Standardna biblioteka: Izuzetno bogata biblioteka sa ugrađenom podrškom za HTTP, JSON, TLS i druge komponente mreže.
Go je danas dominantan u cloud-native razvoju – preko 75% projekata unutar Cloud Native Computing Foundation ekosistema napisano je upravo u ovom jeziku.
Zašto je Go idealan za mrežne servise i API-je?
-
Efikasna konkurentnost: Gorutine su izuzetno lagani (lightweight) procesi. One omogućavaju serveru da istovremeno obradi desetine hiljada zahteva bez značajnog opterećenja memorije i procesora.
-
Ugrađeni alati: Sintaksa je čista, a alati poput
go fmtautomatski formatiraju kod, osiguravajući konzistentnost tima. -
Skalabilnost: Dizajniran prvenstveno za cloud okruženja i mikroservise, omogućava kompanijama da lako skaliraju infrastrukturu kako zahtevi rastu.
Praktični tutorijal: Kreiranje REST API-ja sa Go i Gin-om
U ovom tutorijalu kreiraćemo jednostavan REST API koristeći Go i Gin, izuzetno popularan i brz veb-radni okvir.
Korak 1: Instalacija Go-a i Gin-a Ukoliko to već niste uradili, preuzmite i instalirajte Go sa zvaničnog sajta. Zatim, instalirajte Gin koristeći Go module:
go get -u github.com/gin-gonic/gin
Korak 2: Kreiranje projekta Kreirajte novi direktorijum za projekat i inicijalizujte Go modul:
mkdir myapi
cd myapi
go mod init myapi
Korak 3: Pisanje osnovnog servera Kreirajte datoteku main.go i unesite sledeći kod:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Zdravo, svete!",
})
})
r.Run() // Pokreće server na 0.0.0.0:8080
}
Ovaj kod kreira server koji na GET zahtev ka ruti /hello odgovara JSON porukom.
Korak 4: Pokretanje servera Pokrenite server komandom:
go run main.go
Otvorite veb-pregledač i idite na http://localhost:8080/hello. Trebalo bi da vidite JSON odgovor: {"message":"Zdravo, svete!"}.
Korak 5: Dodavanje novih ruta Proširićemo API dodavanjem rute za listu korisnika. Ažurirajte main.go:
package main
import (
"github.com/gin-gonic/gin"
)
type User struct {
ID string `json:"id"`
Name string `json:"name"`
}
var users = []User{
{ID: "1", Name: "Marko Markovic"},
{ID: "2", Name: "Jelena Jovanovic"},
}
func main() {
r := gin.Default()
r.GET("/users", func(c *gin.Context) {
c.JSON(200, users)
})
r.POST("/users", func(c *gin.Context) {
var newUser User
if err := c.ShouldBindJSON(&newUser); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
users = append(users, newUser)
c.JSON(201, newUser)
})
r.Run()
}
Sada možete poslati POST zahtev (npr. putem Postman-a ili cURL-a) sa JSON podacima da biste kreirali novog korisnika:
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"id":"3","name":"Petar Petrovic"}'
Napomena: Za produkcione aplikacije preporučuje se integracija sa pravom bazom podataka (npr. PostgreSQL uz paket database/sql), dok se ovde memorijski niz koristi čisto radi jednostavnosti tutorijala.
Kontroverze i ograničenja
Iako je Go fantastičan alat, važno je razumeti njegova ograničenja:
-
Jednostavnost naspram složenosti: Nedostatak nekih naprednih objektno-orijentisanih koncepata može biti prepreka za razvoj kompleksnijih domenskih arhitektura.
-
Kriva učenja za konkurenciju: Iako su gorutine sintaksno lake, razumevanje kanala, trkačkih uslova (race conditions) i sinhronizacije može biti izazovno za početnike.
-
Ekosistem: Standardna biblioteka je sjajna, ali je ukupan broj eksternih paketa (third-party) i dalje manji u poređenju sa Python-om ili JavaScript-om.
Ipak, ovi izazovi su višestruko nadoknađeni brzinom, sirovim performansama i činjenicom da je Go praktično postao standard za cloud-native i mikroservisni razvoj, što ga čini jednim od najisplativijih jezika za učenje danas.



