Featured

Cách định nghĩa và sử dụng cấu trúc lồng nhau trong Golang

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

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 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 :

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: PersonAddress. 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 PersonAddress bằng cách sử dụng ký hiệu chấm để truy cập những trường lồng nhau.

CÓ THỂ BẠN QUAN TÂM