Go (język programowania)
![]() Logo języka | |
Pojawienie się |
10 lis 2009 |
---|---|
Paradygmat |
programowanie strukturalne, programowanie proceduralne, programowanie imperatywne, przetwarzanie współbieżne, programowanie obiektowe, programowanie funkcyjne |
Typowanie |
Inferencja typów, static typing, structural typing, Typowanie silne, Duck typing |
Implementacje |
go, gccgo |
Aktualna wersja stabilna |
1.24.2 |
Twórca | |
Licencja | |
Platforma sprzętowa | |
Platforma systemowa |
DragonFly BSD, FreeBSD, Linux, macOS, NetBSD, OpenBSD, Plan 9, Solaris, Microsoft Windows, iOS, Android, AIX, Illumos |
Strona internetowa |

Go (często nazywany także golang) – wieloparadygmatowy język programowania opracowany przez pracowników firmy Google: Roberta Griesemera, Roba Pike’a oraz Kena Thompsona. Łączy w sobie łatwość pisania aplikacji charakterystyczną dla języków dynamicznych (np. Python, Lisp), jak również wydajność języków kompilowanych (np. C, C++).
Dostępny jest kompilator na platformę x86, x64 i ARM o nazwie go. Został również stworzony kompilator na bazie GNU Compiler Collection – gccgo[2].
Generyki
[edytuj | edytuj kod]Brak wsparcia dla programowania generycznego we wczesnych wersjach Go spotkał się z dużą krytyką.[3] Projektanci wyrazili otwartość na programowanie generyczne i zauważyli, że wbudowane funkcje w rzeczywistości są generyczne pod względem typów, ale traktowane jako przypadki specjalne. Rob Pike nazwał to słabością, która mogłaby zostać w przyszłości zmieniona.[4]
W sierpniu 2018 roku główni współtwórcy Go opublikowali wstępne projekty dotyczące programowania generycznego i obsługi błędów, prosząc użytkowników o przesyłanie opinii.[5] Jednak propozycja dotycząca obsługi błędów została ostatecznie porzucona.[6]
W czerwcu 2020 roku opublikowano nowy projekt dokumentu, który dodawał do Go niezbędną składnię umożliwiającą deklarowanie generycznych funkcji i typów.[7] Udostępniono narzędzie do translacji kodu, go2go, aby umożliwić użytkownikom wypróbowanie nowej składni, wraz z wersją internetowego Go Playground obsługującą generyki.[8]
Ostatecznie generyki zostały dodane do Go w wersji 1.18, wydanej 15 marca 2022 roku.[9]
Przykłady
[edytuj | edytuj kod]Hello World
[edytuj | edytuj kod]Przykładowy program (Hello world) napisany w Go:
package main
func main() {
println("Hello, World")
}
Współbieżność
[edytuj | edytuj kod]package main
import (
"fmt"
"time"
)
func wordPrinter(word string, n int) {
for range n {
fmt.Println("Podaje słowo: ", word)
time.Sleep(time.Second)
}
}
func main() {
go wordPrinter("pierwsze", 3)
time.Sleep(500 * time.Millisecond)
go wordPrinter("drugie", 4)
time.Sleep(5 * time.Second)
}
Powyższy program demonstruje wykorzystanie gorutyn – lekkich wątków współbieżnych w języku Go. Funkcja wordPrinter
przyjmuje jako argumenty ciąg znaków (word
) oraz liczbę powtórzeń (n
), a następnie wypisuje podane słowo n
razy, wprowadzając jednosekundowe opóźnienie między iteracjami. Program uruchamia dwie gorutyny, które działają równolegle, pokazując mechanizm współbieżnego wykonywania zadań.
Generyki
[edytuj | edytuj kod]package main
func greater[T int | float64 | string](v1 T, v2 T) bool {
return v1 > v2
}
func main() {
println(greater(1.1, 1.2))
println(greater(1, 2))
println(greater("a", "b"))
println(greater("b", "a"))
}
Funkcja greater[T]
przyjmuje parametr typu T
, ograniczony do int
, float64
i string
, umożliwiając porównywanie wartości tych typów. Dzięki generykom kod jest elastyczny i wielokrotnego użytku, eliminując konieczność pisania osobnych funkcji dla każdego typu.
Przypisy
[edytuj | edytuj kod]- ↑ The Go Gopher - The Go Blog. blog.golang.org, 2014-03-24. [dostęp 2021-08-18]. (ang.).
- ↑ Top (The GNU Go Compiler). gcc.gnu.org. [dostęp 2021-08-06]. (ang.).
- ↑ Go Developer Survey 2020 Results - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).
- ↑ Arrays, slices (and strings): The mechanics of 'append' - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).
- ↑ Go 2 Draft Designs [online], go.googlesource.com [dostęp 2025-01-27] .
- ↑ Proposal: A built-in Go error check function, "try" · Issue #32437 · golang/go [online], GitHub [dostęp 2025-01-27] (ang.).
- ↑ Type Parameters - Draft Design [online], go.googlesource.com [dostęp 2025-01-27] .
- ↑ Generics in Go [online], Bitfield Consulting, 10 marca 2024 [dostęp 2025-01-27] (ang.).
- ↑ Go 1.18 is released! - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).
Linki zewnętrzne
[edytuj | edytuj kod]- Strona domowa języka (ang.)
- Historia wersji (ang.)
- Tutorial Go (ang.)
- Lista popularnych pakietów