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

GolangGolangBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот лаба旨在测试您对Go语言结构体的了解,结构体是字段的类型化集合。结构体对于将数据分组以形成记录很有用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/DataTypesandStructuresGroup(["Data Types and Structures"]) go/DataTypesandStructuresGroup -.-> go/structs("Structs") subgraph Lab Skills go/structs -.-> lab-15515{{"Обработка структур в Go"}} end

Структуры

В этом лабе вам нужно завершить функцию 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 для группировки данных в записи. Также вы узнали, как создавать новые структуры, обращаться к полям структуры и обновлять поля структуры.