Введение
Этот лаба旨在测试您对 Go 语言结构体的了解,结构体是字段的类型化集合。结构体对于将数据分组以形成记录很有用。
Структуры
В этом лабе вам нужно завершить функцию newPerson, которая создает новый структур person с заданным именем. Структ тип person имеет поля name и age.
- Структ тип
personдолжен иметь поляnameиage. - Функция
newPersonдолжна создать новый структурpersonс заданным именем. - Функция
newPersonдолжна вернуть указатель на вновь созданный структурperson. - Функция
mainдолжна напечатать следующее:- Новый структур с именем "Bob" и возрастом 20.
- Новый структур с именем "Alice" и возрастом 30.
- Новый структур с именем "Fred" и возрастом 0.
- Указатель на новый структур с именем "Ann" и возрастом 40.
- Новый структур созданный с использованием функции
newPersonс именем "Jon" и возрастом 42. - Поле
nameструктуры с именем "Sean" и возрастом 50. - Поле
ageструктуры-указателя на структуру с именем "Sean" и возрастом 50. - Поле
ageструктуры-указателя на структуру с именем "Sean" и возрастом 50 после обновления поляageдо 51.
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
Ниже представлен полный код:
// Структуры в Go - это типизированные коллекции полей.
// Они полезны для группировки данных в записи.
package main
import "fmt"
// Этот тип структуры `person` имеет поля `name` и `age`.
type person struct {
name string
age int
}
// `newPerson` создает новый структур `person` с заданным именем.
func newPerson(name string) *person {
// Вы можете безопасно вернуть указатель на локальную переменную,
// так как локальная переменная будет существовать за пределами области видимости функции.
p := person{name: name}
p.age = 42
return &p
}
func main() {
// Эта синтаксис создает новый структур.
fmt.Println(person{"Bob", 20})
// Вы можете именовать поля при инициализации структуры.
fmt.Println(person{name: "Alice", age: 30})
// Пропущенные поля будут иметь нулевые значения.
fmt.Println(person{name: "Fred"})
// Префикс `&` дает указатель на структуру.
fmt.Println(&person{name: "Ann", age: 40})
// idiomatic - инкапсулировать создание новых структур в конструкторах функций
fmt.Println(newPerson("Jon"))
// Доступ к полям структуры с помощью точки.
s := person{name: "Sean", age: 50}
fmt.Println(s.name)
// Вы также можете использовать точки с указателями на структуры -
// указатели автоматически разыменовываются.
sp := &s
fmt.Println(sp.age)
// Структуры изменяемы.
sp.age = 51
fmt.Println(sp.age)
}
Резюме
В этом лабе вы узнали, как использовать структуры в Go для группировки данных в записи. Также вы узнали, как создавать новые структуры, обращаться к полям структуры и обновлять поля структуры.