Go, często nazywany Golang, to nowoczesny, kompilowany język programowania stworzony przez firmę Google. Został zaprojektowany z myślą o prostocie, wysokiej wydajności oraz łatwym tworzeniu aplikacji współbieżnych.
Go łączy w sobie cechy języków niskiego poziomu (wydajność, kontrola) z wygodą języków wysokiego poziomu (czytelna składnia, szybki development). Dzięki temu stał się jednym z najważniejszych języków backendowych ostatniej dekady.
Go został zaprezentowany w 2009 roku przez inżynierów Google: Roberta Griesemera, Roba Pike’a i Kena Thompsona. Jego powstanie było odpowiedzią na problemy złożoności, długiego czasu kompilacji i trudnej współbieżności w dużych systemach.
Główne cele projektowe Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Każdy program w Go posiada funkcję main
oraz punkt wejścia w pakiecie main.
var age int = 30
name := "Jan"
active := true
Operator := pozwala na automatyczne wnioskowanie typu.
if age >= 18 {
fmt.Println("Pełnoletni")
} else {
fmt.Println("Niepełnoletni")
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
Go posiada tylko jedną pętlę – for,
która zastępuje klasyczne while i do-while.
func add(a int, b int) int {
return a + b
}
Go umożliwia zwracanie wielu wartości z funkcji.
func divide(a int, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
Go nie posiada klas w tradycyjnym sensie. Zamiast tego używa struktur (struct).
type User struct {
Email string
Age int
}
func (u User) Login() {
fmt.Println("User logged in")
}
Metody są funkcjami powiązanymi ze strukturą.
Interfejsy w Go są implementowane niejawnie, co jest jedną z najważniejszych cech języka.
type Logger interface {
Log(message string)
}
Jeśli struktura implementuje wszystkie metody interfejsu, automatycznie spełnia jego kontrakt.
Jedną z największych zalet Go jest wbudowane wsparcie dla współbieżności.
go func() {
fmt.Println("Running concurrently")
}()
ch := make(chan int)
go func() {
ch <- 10
}()
value := <-ch
Kanały umożliwiają bezpieczną komunikację między goroutines.
Go nie używa wyjątków do obsługi błędów. Zamiast tego błędy są zwracane jawnie.
if err != nil {
fmt.Println(err)
}
Kod w Go jest organizowany w pakiety.
import "net/http"
Go Modules umożliwiają zarządzanie zależnościami.
Go jest idealnym językiem do tworzenia:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello"))
})
http.ListenAndServe(":8080", nil)
Programy Go kompilują się do jednego pliku binarnego, który nie wymaga zewnętrznych zależności.
go buildgo testgo fmtgo vetGo to język zaprojektowany z myślą o nowoczesnych systemach, gdzie kluczowe są wydajność, prostota i skalowalność. Dzięki wsparciu Google oraz ogromnej adopcji w chmurze, Go stał się jednym z filarów współczesnego backendu.
Dla projektów wymagających szybkości, niezawodności oraz łatwej współbieżności, Go jest jednym z najlepszych dostępnych wyborów.
1