FRONT-END

GOLANG

Go (Golang) - nowoczesny język programowania systemowego

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 jest fundamentem wielu nowoczesnych technologii, w tym Docker, Kubernetes, Terraform, Prometheus oraz ogromnej liczby systemów chmurowych i mikroserwisów.

Historia i cele języka Go

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:

  • prostota i czytelność kodu
  • szybka kompilacja
  • wydajność zbliżona do C/C++
  • łatwa współbieżność
  • minimalizm składni

Charakterystyka języka Go

  • język kompilowany do kodu maszynowego
  • statyczne typowanie
  • automatyczne zarządzanie pamięcią (Garbage Collector)
  • brak dziedziczenia klasowego
  • nacisk na kompozycję zamiast dziedziczenia

Podstawowa składnia Go

Program „Hello World”


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.


Zmienne i typy danych


var age int = 30
name := "Jan"
active := true

Operator := pozwala na automatyczne wnioskowanie typu.


Instrukcje warunkowe i pętle


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.


Funkcje


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
}

Struktury i kompozycja

Go nie posiada klas w tradycyjnym sensie. Zamiast tego używa struktur (struct).


type User struct {
  Email string
  Age   int
}

Metody


func (u User) Login() {
  fmt.Println("User logged in")
}

Metody są funkcjami powiązanymi ze strukturą.


Interfejsy

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.


Współbieżność – goroutines

Jedną z największych zalet Go jest wbudowane wsparcie dla współbieżności.


go func() {
  fmt.Println("Running concurrently")
}()

Kanały (Channels)


ch := make(chan int)

go func() {
  ch <- 10
}()

value := <-ch

Kanały umożliwiają bezpieczną komunikację między goroutines.


Obsługa błędów

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)
}

Pakiety i moduły

Kod w Go jest organizowany w pakiety.


import "net/http"

Go Modules umożliwiają zarządzanie zależnościami.


Go jako język backendowy

Go jest idealnym językiem do tworzenia:

  • API REST
  • mikroserwisów
  • systemów rozproszonych
  • aplikacji chmurowych

http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("Hello"))
})
http.ListenAndServe(":8080", nil)

Wydajność i kompilacja

Programy Go kompilują się do jednego pliku binarnego, który nie wymaga zewnętrznych zależności.

  • szybki start aplikacji
  • niskie zużycie pamięci
  • łatwe wdrażanie (deploy)

Narzędzia ekosystemu Go

  • go build
  • go test
  • go fmt
  • go vet

Zastosowania języka Go

  • backend aplikacji webowych
  • mikroserwisy
  • DevOps i narzędzia CLI
  • systemy chmurowe
  • sieci i infrastruktura

Zalety i ograniczenia Go

Zalety

  • bardzo wysoka wydajność
  • prosta składnia
  • świetna współbieżność
  • łatwy deployment

Ograniczenia

  • brak generics (częściowo rozwiązane w nowych wersjach)
  • ograniczone możliwości OOP
  • minimalistyczne podejście do składni

Podsumowanie

Go 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
HOME | CSS | HTML | CONTACT
RED | LIME | ORG |copy(Ⓒ)2023:xyh