Menu
Coddy logo textTech

Анонимные структуры

Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy. Урок 15 из 107.

anonymous struct — это структура без именованного типа. Вы определяете её структуру и создаёте экземпляр за один шаг, не используя ключевое слово type.

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

Это напрямую создаёт значение struct без объявления повторно используемого типа. Anonymous struct полезны, когда вам нужна быстрая одноразовая структура данных, которая не будет использоваться где-либо ещё в вашем коде.

Распространённый вариант использования — группировка связанных данных для одной функции или теста.

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

Анонимные структуры также популярны в табличных тестах, где каждый тестовый случай имеет уникальные поля.

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

Поскольку у анонимных структур нет имени типа, вы не можете определять для них методы или повторно использовать этот тип в другом месте. Используйте их для временной локальной группировки данных. Для всего, на что вы будете ссылаться несколько раз, вместо этого определите именованный тип структуры.

challenge icon

Задание

Легко

Создадим быструю систему configuration, которая демонстрирует, когда anonymous struct особенно полезна — для разового группирования данных, которому не нужен повторно используемый тип.

Ты организуешь код в двух файлах:

  • config.go: создай функцию с именем GetServerConfig, которая принимает имя server (string), порт (int) и режим debug (bool) в качестве parameters. Эта функция должна возвращать anonymous struct, содержащую эти три значения в качестве полей: Name, Port и Debug. Поскольку эта configuration используется только в одном месте, нет необходимости определять для неё именованный тип.
  • main.go: считай значения configuration server из input, вызови свою функцию GetServerConfig и выведи сведения о configuration.

Будут предоставлены следующие входные данные:

  • Строка 1: имя Server
  • Строка 2: номер Port
  • Строка 3: режим Debug (true или false)

Формат вывода:

Server: [Name]
Port: [Port]
Debug: [Debug]

Например, если даны api-server, 8080 и true, твой вывод должен быть таким:

Server: api-server
Port: 8080
Debug: true

Обрати внимание, как anonymous struct позволяет возвращать сгруппированные данные, не загромождая кодовую базу типом, который используется только один раз.

Попробуйте сами

package main

import (
	"fmt"
)

func main() {
	// Прочитать входные значения
	var name string
	var port int
	var debug bool

	fmt.Scanln(&name)
	fmt.Scanln(&port)
	fmt.Scanln(&debug)

	// TODO: Вызвать GetServerConfig с входными значениями
	// и сохранить возвращённую анонимную структуру

	// TODO: Вывести конфигурацию в требуемом формате:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Go