Golang'da yapılar (veya yapılar), farklı tipteki öğeleri tek bir birimde gruplandırmamıza olanak tanır; bu da gerçek dünyadaki varlıkları modellemek için yararlıdır . Golang'daki anonim yapılar, tek seferlik amaçlar için kullanılan, isimlendirilmemiş geçici yapılardır; anonim alanlar ise isimlendirilmemiş alanların gömülmesine olanak tanır.

Örneğin:
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)
}
Sözdizimi:
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'da Anonim Yapılar
Go'da anonim yapılar bir isim olmadan tanımlanır ve geçici, tek kullanımlık yapılar oluşturmak için kullanışlıdır. Söz dizimi ve kod örneği şöyledir.
Sözdizimi:
variable := struct {
field1 dataType1
field2 dataType2
// Các trường bổ sung khi cần
}{value1, value2}
Örneğin:
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)
}
Sonuç:
Name: A
Enrollment: 12345
GPA: 3.8
Bu kod , içerisinde isim ve kayıt bilgilerinin saklandığı anonim personalDetails yapısı bulunan bir Öğrenci yapısını tanımlar. Daha sonra bu alanlara ait değerlerle student'i başlatıp yazdırıyoruz.
Anonim alanlar
Go'daki anonim alanlar, alanları açıkça adlandırmadan tanımlamanıza olanak tanır, yalnızca türleri belirtilir. Bu, alanların doğal olarak tür adını takip ettiği durumlarda yararlıdır.
Sözdizimi
type StructName struct {
dataType1
dataType2
// Additional anonymous fields
}
Örneğin:
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)
}
Sonuç:
Enrollment: 12345
Name: A
GPA: 3.8
Burada veri tipleri ( int, string, float64 ) alan adı görevi gördüğünden değerlere erişim tiplere bağlıdır.
Golang'daki Anonim Alanlar Hakkında Hatırlanması Gereken Önemli Noktalar
1. Benzersiz gereklilik: Aynı türdeki iki alanı tek bir yapıda kullanamazsınız. Örneğin:
type InvalidStudent struct {
int
int // Error: duplicate type
}
2. Adlandırılmış ve anonim alanları birleştirme: Bir yapıda anonim ve adlandırılmış alanları birleştirebilirsiniz.
type Student struct {
id int // Named field
int // Anonymous field
}