في Golang ، تسمح لنا الهياكل (أو البنيات) بتجميع عناصر من أنواع مختلفة في وحدة واحدة، وهو أمر مفيد لنمذجة الكيانات في العالم الحقيقي. الهياكل المجهولة في 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
يقوم هذا الكود بتعريف بنية طالب تحتوي على بنية 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
}