|
Struktury v Go jsou kolekcemi prvků s typem. Jsou užitečné pro vytváření skupin dat a utváření záznamů. |
|
![]()
package main
|
|
import "fmt"
|
|
|
Tato struktura |
type osoba struct {
jmeno string
vek int
}
|
|
|
func novaOsoba(jmeno string) *osoba {
|
|
Go je jazyk se správou paměti pomocí garbage collectoru; můžete bezpečně vrátit ukazatel na lokální proměnnou - garbage collector ji uklidí až ve chvíli, kdy na ni neexistují žádné aktivní odkazy. |
o := osoba{jmeno: jmeno}
o.vek = 42
return &o
}
|
func main() {
|
|
|
Tento zápis vytvoří novou strukturu. |
fmt.Println(osoba{"Bob", 20})
|
|
Během inicializace struktury je možné pojmenovat položky. |
fmt.Println(osoba{jmeno: "Alice", vek: 30})
|
|
Vynechané položky budou mít nulovou hodnotu. |
fmt.Println(osoba{jmeno: "Fred"})
|
|
S prefixem |
fmt.Println(&osoba{jmeno: "Ann", vek: 40})
|
|
Je idiomatické zapouzdřit vytváření nových struktur do konstruktorových funkcí. |
fmt.Println(novaOsoba("Jon"))
|
|
K položkám struktur se přistupuje pomocí tečky. |
s := osoba{jmeno: "Sean", vek: 50}
fmt.Println(s.jmeno)
|
|
Struktury je možné měnit. |
s.vek = 51
fmt.Println(s)
|
|
Také je možné používat tečku na ukazatel na strukturu - ukazatelé jsou automaticky dereferencovány. |
sp := &s
sp.vek = 52
fmt.Println(sp.vek)
|
|
Pokud typ struktury použijeme jen pro jedinou hodnotu, nemusíme ho pojmenovávat. Hodnota může mít anonymní typ struktury. Tato technika se běžně používá pro testy řízené tabulkou. |
pes := struct {
jmeno string
hodny bool
}{
"Rex",
true,
}
fmt.Println(pes)
}
|
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
{Sean 51}
52
{Rex true}
|
Další příklad: Metody.