В Golang структуры (или structs) позволяют нам группировать элементы разных типов в единое целое, что полезно для моделирования сущностей реального мира. Анонимные структуры в Golang — это временные структуры без имен, используемые для одноразовых целей, в то время как анонимные поля допускают встраивание неименованных полей.

Например:
package main
import "fmt"
// struct học sinh với cấu trúc và trường ẩn danh
type Student struct {
struct { // Cấu trúc bên trong ẩn danh cho thông tin cá nhân
name string
enrollment int
}
GPA float64 // Trường chuẩn
}
func main() {
student := Student{
struct {
name string
enrollment int
}{
name: "A",
enrollment: 12345,
},
GPA: 3.8,
}
fmt.Println("Name:", student.name)
fmt.Println("Enrollment:", student.enrollment)
fmt.Println("GPA:", student.GPA)
}
Синтаксис:
variable := struct {
field1 dataType1
field2 dataType2 # Cấu trúc ẩn danh
// Trường bổ sung khi cần
}{value1, value2}
type StructName struct {
dataType1
dataType2 # Trường ẩn danh
// Trường ẩn danh bổ sung
}
Анонимные структуры в Go
Анонимные структуры в Go определяются без имени и полезны для создания временных, одноразовых структур. Вот синтаксис и пример кода.
Синтаксис:
variable := struct {
field1 dataType1
field2 dataType2
// Các trường bổ sung khi cần
}{value1, value2}
Например:
package main
import "fmt"
// Cấu trúc sinh viên với cấu trúc bên trong ẩn danh cho thông tin cá nhân
type Student struct {
personalDetails struct { // Cấu trúc ẩn danh bên trong cho thông tin cá nhân
name string
enrollment int
}
GPA float64 // Trường chuẩn
}
func main() {
// Khởi tạo cấu trúc bên trong cho student
student := Student{
personalDetails: struct {
name string
enrollment int
}{
name: "A",
enrollment: 12345,
},
GPA: 3.8,
}
// Hiện giá trị
fmt.Println("Name:", student.personalDetails.name)
fmt.Println("Enrollment:", student.personalDetails.enrollment)
fmt.Println("GPA:", student.GPA)
}
Результат:
Name: A
Enrollment: 12345
GPA: 3.8
Этот код определяет структуру Student с анонимной структурой personalDetails внутри, в которой хранятся имя и регистрационная информация. Затем инициализируйте студента значениями для этих полей и распечатайте их.
Анонимные поля
Анонимные поля в Go позволяют определять поля без явных имен, указываются только их типы. Это полезно, когда поля естественным образом следуют за именем типа.
Синтаксис
type StructName struct {
dataType1
dataType2
// Additional anonymous fields
}
Например:
package main
import "fmt"
// Cấu trúc học sinh bằng các trường ẩn danh
type Student struct {
int // Số đăng ký (trường ẩn danh)
string // Tên trường ẩn danh
float64 // GPA (trường ẩn danh)
}
func main() {
// Khởi tạo struct học sinh với các trường ẩn danh
student := Student{12345, "A", 3.8}
// Hiện giá trị
fmt.Println("Enrollment:", student.int)
fmt.Println("Name:", student.string)
fmt.Println("GPA:", student.float64)
}
Результат:
Enrollment: 12345
Name: A
GPA: 3.8
Здесь типы данных ( int, string, float64 ) выступают в качестве имен полей, поэтому доступ к значениям зависит от типов.
Важные моменты, которые следует помнить об анонимных полях в Golang
1. Уникальное требование: нельзя использовать два поля одного типа в одной структуре. Например:
type InvalidStudent struct {
int
int // Error: duplicate type
}
2. Объединение именованных и анонимных полей: Вы можете объединить анонимные и именованные поля в структуру.
type Student struct {
id int // Named field
int // Anonymous field
}