Срез структур в Go
Срез может хранить несколько значений одной структуры. Литерал среза выглядит как у чисел или строк, только каждый элемент записывают литералом структуры в фигурных скобках. Длина среза равна числу таких элементов.
Соберем срез пользователей и выведем его:
type User struct {
Name string
Age int
}
people := []User{
{Name: "ann", Age: 20},
{Name: "bob", Age: 30},
}
fmt.Println(people)
Обход циклом for range дает копию элемента.
Чтобы изменить поле внутри среза, берут индекс
и пишут через него, а не через имя из заголовка
цикла:
type User struct {
Name string
Age int
}
people := []User{
{Name: "ann", Age: 20},
{Name: "bob", Age: 30},
}
people[0].Age = 21
fmt.Println(people[0].Age)
На экране 21. Запись people[i].Age
меняет элемент в срезе. Если в цикле взять
for _, person := range people и менять
person.Age, срез не обновится, потому
что person - копия элемента.
type User struct {
Name string
Age int
}
people := []User
for i := range people {
people[i].Age = 22
}
fmt.Println(people[0].Age)
Дан тип User с Name и Age.
Создайте срез из двух пользователей и выведите его.
Дан следующий срез:
type User struct {
Name string
Age int
}
people := []User{
{Name: "ann", Age: 20},
{Name: "bob", Age: 30},
}
Поставьте возраст первого элемента 25
и выведите people[0].
Дан следующий срез:
type User struct {
Name string
Age int
}
people := []User
Обойдите его циклом с индексом, увеличьте
Age на 1 и выведите элемент
с индексом 0.