Przejdź do zawartości

Go (język programowania)

Z Wikipedii, wolnej encyklopedii
Go
Logo języka Go
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
(1 kwietnia 2025) [±]

Twórca

Rob Pike, Ken Thompson, Robert Griesemer

Licencja

licencje BSD

Platforma sprzętowa

wieloplatformowy

Platforma systemowa

DragonFly BSD, FreeBSD, Linux, macOS, NetBSD, OpenBSD, Plan 9, Solaris, Microsoft Windows, iOS, Android, AIX, Illumos

Strona internetowa
Gryzoń z rodziny gofferowatych jest oficjalną maskotką języka Go[1]

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]
  1. The Go Gopher - The Go Blog. blog.golang.org, 2014-03-24. [dostęp 2021-08-18]. (ang.).
  2. Top (The GNU Go Compiler). gcc.gnu.org. [dostęp 2021-08-06]. (ang.).
  3. Go Developer Survey 2020 Results - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).
  4. Arrays, slices (and strings): The mechanics of 'append' - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).
  5. Go 2 Draft Designs [online], go.googlesource.com [dostęp 2025-01-27].
  6. Proposal: A built-in Go error check function, "try" · Issue #32437 · golang/go [online], GitHub [dostęp 2025-01-27] (ang.).
  7. Type Parameters - Draft Design [online], go.googlesource.com [dostęp 2025-01-27].
  8. Generics in Go [online], Bitfield Consulting, 10 marca 2024 [dostęp 2025-01-27] (ang.).
  9. Go 1.18 is released! - The Go Programming Language [online], go.dev [dostęp 2025-01-27] (ang.).

Linki zewnętrzne

[edytuj | edytuj kod]