Структурите в Go представляват съвкупност от полета от различни видове данни. Те са полезни за съчетаване на данни заедно и по този начин да се съставят записи.
import "fmt"
Този вид структура, наречен person, има полета с
имена name и age.
type person struct {
name string
age int
}
Тази функция newPerson съставя нов запис от вида
person с подадено име.
func newPerson(name string) *person {
Go е език, в който заеманата от програмата памет се освобождава автоматично. Безопасно е да върнете указател към създадена във функцията променлива. Паметта, заемана от данните, към които сочи той, ще бъде освободена от събирача на отпадъци1, когато вече няма действащи препратки към данните.
p := person{name: name}
p.age = 42
return &p
}
func main() {
Така съдаваме нов запис от структурния вид
person.
fmt.Println(person{"Пешо", 20})
Можете да ползвате имената на полетата, когато създавате нов структурен запис (нова структура).
fmt.Println(person{name: "Лиляна", age: 30})
Пропуснатите полета се създават с нулеви стойности.
fmt.Println(person{name: "Тодор"})
Ако предпоставим &, получаваме указател към
структурата.
fmt.Println(&person{name: "Ани", age: 40})
Прието е да затваряме създаването на нова структура във функции, наречени конструктори.
fmt.Println(newPerson("Иван"))
Полетата се достъпват, като напишем точка, последвана от името на полето.
s := person{name: "Явор", age: 50}
fmt.Println(s.name)
Можете да ползвате точка и с указатели към структури. Прекият достъп до данните е автоматичен.
sp := &s
fmt.Println(sp.age)
Структурите са меними1.
sp.age = 51
fmt.Println(sp.age)
Ако използваме някакъв вид структура само за някаква единична стойност, не е нужно да даваме име на вида структура. Стойността може да бъде от безименен вид структура. Този начин на създаване на на структурни записи се ползва често за таблици от тестове.
куче := struct {
име string
доброЛиЕ bool
}{
"Рекс",
true,
}
fmt.Println(куче)
}
$ go run structs.go
{Пешо 20}
{Лиляна 30}
{Тодор 0}
&{Ани 40}
&{Иван 42}
Явор
50
51
{Рекс true}
Следващ пример: Методи.