Một cấu trúc hoặc struct trong Golang là một kiểu do người dùng định nghĩa, cho phép chúng ta tạo một nhóm các phần tử có các kiểu khác nhau thành một đơn vị duy nhất.
Bất kỳ thực thể nào trong thế giới thực có một số tập hợp các thuộc tính hoặc trường đều có thể được biểu diễn dưới dạng struct.

Cách dùng cấu trúc lồng nhau trong Golang
Ngôn ngữ Go cho phép cấu trúc lồng nhau. Một cấu trúc là trường của một cấu trúc khác được gọi là Cấu trúc lồng nhau. Hay nói cách khác, một cấu trúc bên trong một cấu trúc khác được gọi là Cấu trúc lồng nhau. Cú pháp:
type struct_name_1 struct{
// Các trường
}
type struct_name_2 struct{
variable_name struct_name_1
}
Hãy xem xét ví dụ sau để hiểu rõ về cấu trúc lồng nhau trong Golang:
Ví dụ 1:
// Chương trình Go minh hoạc
// cấu trúc lồng nhau
package main
import "fmt"
// Tạo cấu trúc
type Author struct {
name string
branch string
year int
}
// Tạo cấu trúc lòng nhau
type HR struct {
// cấu trúc là một trường
details Author
}
func main() {
// Khởi tạo các trường
// của cấu trúc
result := HR{
details: Author{"Sona", "ECE", 2013},
}
// Hiện giá trị
fmt.Println("\nDetails of Author")
fmt.Println(result)
}
Kết quả:
Details of Author
{{Sona ECE 2013}}
Ví dụ 2:
// Chương trình Golang minh họa
// cấu trúc lồng nhau
package main
import "fmt"
// Tạo cấu trúc
type Student struct {
name string
branch string
year int
}
// Tạo cấu trúc lồng nhau
type Teacher struct {
name string
subject string
exp int
details Student
}
func main() {
// Khởi tạo các trường
// của cấu trúc
result := Teacher{
name: "Suman",
subject: "Java",
exp: 5,
details: Student{"Bongo", "CSE", 2},
}
// Hiện giá trị
fmt.Println("Details of the Teacher")
fmt.Println("Teacher's name: ", result.name)
fmt.Println("Subject: ", result.subject)
fmt.Println("Experience: ", result.exp)
fmt.Println("\nDetails of Student")
fmt.Println("Student's name: ", result.details.name)
fmt.Println("Student's branch name: ", result.details.branch)
fmt.Println("Year: ", result.details.year)
}
Kết quả:
Details of the Teacher
Teacher's name: Suman
Subject: Java
Experience: 5
Details of Student
Student's name: Bongo
Student's branch name: CSE
Year: 2
Ví dụ 3:
Trong Go, một cấu trúc có thể có các trường mà bản thân chúng là các cấu trúc, được gọi là cấu trúc lồng nhau. Sau đây là ví dụ về cấu trúc có một cấu trúc lồng nhau:
package main
import (
"fmt"
)
type Address struct {
Street string
City string
State string
PostalCode string
}
type Person struct {
FirstName string
LastName string
Age int
Address Address
}
func main() {
p := Person{
FirstName: "John",
LastName: "Doe",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Anytown",
State: "CA",
PostalCode: "12345",
},
}
fmt.Println(p.FirstName, p.LastName)
fmt.Println("Age:", p.Age)
fmt.Println("Address:")
fmt.Println("Street:", p.Address.Street)
fmt.Println("City:", p.Address.City)
fmt.Println("State:", p.Address.State)
fmt.Println("Postal Code:", p.Address.PostalCode)
}
Kết quả:
John Doe
Age: 30
Address:
Street: 123 Main St
City: Anytown
State: CA
Postal Code: 12345
Ở đây, chúng ta định nghĩa hai kiểu struct: Person
và Address
. Person
có một trường struct lồng nhau là Address
. Trong hàm main, chúng ta tạo một phiên bản Person
mới với một trường Address
. Sau đó, chúng ta in ra các giá trị nhiều trường khác nhau của các struct Person
và Address
bằng cách sử dụng ký hiệu chấm để truy cập những trường lồng nhau.