În Golang , structurile (sau structurile) ne permit să grupăm elemente de diferite tipuri într-o singură unitate, ceea ce este util pentru modelarea entităților din lumea reală. Structurile anonime din Golang sunt structuri temporare fără nume utilizate în scopuri unice, în timp ce câmpurile anonime permit încorporarea câmpurilor fără nume.

De exemplu:
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)
}
Sintaxă:
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
}
Structuri anonime în Go
Structurile anonime din Go sunt definite fără nume și sunt utile pentru crearea de structuri temporare, de unică folosință. Iată sintaxa și exemplul de cod.
Sintaxă:
variable := struct {
field1 dataType1
field2 dataType2
// Các trường bổ sung khi cần
}{value1, value2}
De exemplu:
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)
}
Rezultat:
Name: A
Enrollment: 12345
GPA: 3.8
Acest cod definește o structură Student cu o structură anonimă personalDetails în interior, stochând numele și informațiile de înregistrare. Apoi inițializați studentul cu valori pentru aceste câmpuri și imprimați-le.
Câmpuri anonime
Câmpurile anonime din Go vă permit să definiți câmpuri fără nume explicite, fiind specificate doar tipurile acestora. Acest lucru este util atunci când câmpurile urmează în mod natural numele tipului.
Sintaxă
type StructName struct {
dataType1
dataType2
// Additional anonymous fields
}
De exemplu:
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)
}
Rezultat:
Enrollment: 12345
Name: A
GPA: 3.8
Aici, tipurile de date ( int, string, float64 ) acționează ca nume de câmpuri, deci accesarea valorilor depinde de tipuri.
Puncte importante de reținut despre câmpurile anonime din Golang
1. Cerință unică: nu puteți utiliza două câmpuri de același tip într-o structură. De exemplu:
type InvalidStudent struct {
int
int // Error: duplicate type
}
2. Combinarea câmpurilor denumite și anonime: puteți combina câmpuri anonime și denumite într-o structură.
type Student struct {
id int // Named field
int // Anonymous field
}