Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpMtFc 13 of 280 menu
◀ ▶

Функция создания в Go

Готовое значение собирают отдельной функцией и возвращают указатель. Это обычная функция уровня файла, не метод: имя часто начинается с New и типа, параметры задают поля, в теле создают литерал и берут его адрес.

Запишем функцию, которая создает пользователя:

type User struct { Name string Age int } func NewUser(name string, age int) *User { return &User{Name: name, Age: age} }

Создадим значение через эту функцию:

u := NewUser("ann", 20) fmt.Println(u.Name, u.Age)

В u лежит указатель на структуру с полями "ann" и 20. К полям обращаются через точку, как у обычной переменной: язык сам разыменовывает указатель при чтении.

Такую функцию удобно держать рядом с типом, когда литерал повторяется или нужно всегда возвращать один и тот же формат значения. Дальше к полученному указателю можно вызывать методы с получателем *User.

Дан тип:

package main import "fmt" type User struct { Name string Age int }

Запишите функцию с именем NewUser, которая принимает имя и возраст и возвращает указатель на литерал. Создайте значение "kate" и 19 и выведите оба поля.

Объявите Box с полем Weight, функцию NewBox с одним параметром и метод указателя, который увеличивает вес на 1. Проверьте цепочку создания и вызова.

Чем функция NewUser отличается от метода на типе User?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить