РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
452 of 1593 menu

Поля структуры

Поля структуры в Go — это компоненты, определяющие набор данных, которые может хранить структура. Каждое поле имеет имя и тип. Доступ к полям осуществляется через оператор точки . после переменной структуры. Поля могут быть экспортируемыми (с большой буквы) или неэкспортируемыми (с маленькой), что определяет их видимость за пределами пакета.

Объявление полей структуры

Поля объявляются внутри определения структуры. Каждое поле задается именем и типом. Имена полей должны быть уникальными в пределах структуры. Рассмотрим пример структуры с несколькими полями:

package main import "fmt" type Person struct { Name string Age int City string } func main() { p := Person{Name: "Alice", Age: 30, City: "New York"} fmt.Println(p) }

Результат выполнения кода:

{Alice 30 New York}

В этом примере структура Person содержит три поля: Name типа string, Age типа int и City типа string.

Доступ к полям структуры

Для доступа к полям используется оператор точки .. Можно как читать значение поля, так и изменять его. Рассмотрим пример:

package main import "fmt" type Book struct { Title string Author string Pages int } func main() { b := Book{Title: "1984", Author: "Orwell", Pages: 328} fmt.Println("Title:", b.Title) fmt.Println("Author:", b.Author) b.Pages = 400 fmt.Println("Updated pages:", b.Pages) }

Результат выполнения кода:

"Title: 1984" "Author: Orwell" "Updated pages: 400"

В этом примере мы сначала читаем значения полей Title и Author, а затем изменяем значение поля Pages.

Экспортируемые и неэкспортируемые поля

Если имя поля начинается с заглавной буквы, оно экспортируется и доступно из других пакетов. Если с маленькой — поле является приватным для текущего пакета. Рассмотрим пример:

package main import "fmt" type User struct { Username string // экспортируемое поле password string // неэкспортируемое поле } func main() { u := User{Username: "john_doe", password: "secret"} fmt.Println("Username:", u.Username) // fmt.Println("Password:", u.password) // Ошибка: поле password не экспортируется }

Результат выполнения кода:

"Username: john_doe"

В этом примере поле Username экспортируется и доступно для чтения, а поле password недоступно за пределами пакета.

Нулевые значения полей

Если поле не инициализировано явно, оно получает нулевое значение для своего типа. Например, для строк это пустая строка, для чисел — 0. Рассмотрим пример:

package main import "fmt" type Product struct { Name string Price float64 InStock bool } func main() { var p Product fmt.Printf("Name: %q, Price: %.2f, InStock: %t\n", p.Name, p.Price, p.InStock) }

Результат выполнения кода:

"Name: "", Price: 0.00, InStock: false"

Как видно из примера, все поля получили нулевые значения: пустая строка, 0 и false.

Сравнение структур с полями

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

package main import "fmt" type Point struct { X int Y int } func main() { p1 := Point{X: 10, Y: 20} p2 := Point{X: 10, Y: 20} p3 := Point{X: 5, Y: 5} fmt.Println("p1 == p2:", p1 == p2) fmt.Println("p1 == p3:", p1 == p3) }

Результат выполнения кода:

"p1 == p2: true" "p1 == p3: false"

Структуры p1 и p2 равны, так как все их поля совпадают. p3 отличается, поэтому сравнение дает false.

Смотрите также

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