Обработка структур в Go

Beginner

This tutorial is from open-source community. Access the source code

Введение

Этот лаба旨在测试您对 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 для группировки данных в записи. Также вы узнали, как создавать новые структуры, обращаться к полям структуры и обновлять поля структуры.