Đẳng thức cấu trúc trong Golang

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ử với 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ố thuộc tính hoặc trường đều có thể được biểu diễn dưới dạng struct. Khái niệm này thường được so sánh với các lớp trong lập trình hướng đối tượng. Nó có thể được gọi là một lớp nhỏ gọn không hỗ trợ kế thừa nhưng hỗ trợ thành phần.

Sự bình đẳng cấu trúc trong Golang

Trong ngôn ngữ Go, bạn được phép so sánh hai cấu trúc nếu chúng có cùng kiểu và chứa các giá trị trường giống nhau với sự trợ giúp của toán tử == hoặc Phương thức DeeplyEqual(). Cả toán tử và phương thức đều trả về true nếu các cấu trúc giống hệt nhau, nếu không, trả về false. Và nếu các biến được so sánh thuộc về cấu trúc khác nhau, thì trình biên dịch sẽ đưa ra lỗi.

Hãy cùng xem xét ví dụ để hiểu rõ hơn về đẳng thức hay so sánh cấu trúc bằng nhau trong Golang nhé!

Lưu ý: Phương thức DeeplyEqual() được định nghĩa trong gói "reflect".

Ví dụ 1:

// Chương trình Go minh họa
// khái niệm của so sánh bình đẳng cấu trúc
// using == operator

package main

import "fmt"

// Tạo một cấu trúc
type Author struct {
	name	 string
	branch string
	language string
	Particles int
}

// Hàm chính
func main() {

	// Tạo biến
	// của cấu trúc Author
	a1 := Author{
		name:	 "Moana",
		branch: "CSE",
		language: "Python",
		Particles: 38,
	}

	a2 := Author{
		name:	 "Moana",
		branch: "CSE",
		language: "Python",
		Particles: 38,
	}

	a3 := Author{
		name:	 "Dona",
		branch: "CSE",
		language: "Python",
		Particles: 38,
	}

	// Kiểm tra xem a1 bằng
	// a2 hay không
	// Dùng toán tử == 
	if a1 == a2 {
	
		fmt.Println("Variable a1 is equal to variable a2")
		
	} else {
	
		fmt.Println("Variable a1 is not equal to variable a2")
	}

	// Kiểm tra xem a1 bằng
	// a2 hay không
	// Dùng toán tử == 
	if a2 == a3 {
	
		fmt.Println("Variable a2 is equal to variable a3")
		
	} else {
	
		fmt.Println("Variable a2 is not equal to variable a3")
	}
}

Kết quả:

Variable a1 is equal to variable a2
Variable a2 is not equal to variable a3

Ví dụ 2:

// Chương trình Go minh họa
// khái niệm bình đẳng cấu trúc
// dùng phương thức DeepEqual() 
package main

import (
	"fmt"
	"reflect"
)

// Tạo một cấu trúc
type Author struct {
	name	 string
	branch string
	language string
	Particles int
}

// Hàm chính
func main() {

	// Tạo biến
	// của cấu trúc Author 
	a1 := Author{
		name:	 "Soana",
		branch: "CSE",
		language: "Perl",
		Particles: 48,
	}

	a2 := Author{
		name:	 "Soana",
		branch: "CSE",
		language: "Perl",
		Particles: 48,
	}

	a3 := Author{
		name:	 "Dia",
		branch: "CSE",
		language: "Perl",
		Particles: 48,
	}
	
	// So sánh a1 với a2
	// Dùng phương thức DeepEqual() 
	fmt.Println("Is a1 equal to a2: ", reflect.DeepEqual(a1, a2))

	// So sánh a2 với a3
	// Dùng phương thức DeepEqual() 
	fmt.Println("Is a2 equal to a3: ", reflect.DeepEqual(a2, a3))
}

Kết quả:

Is a1 equal to a2:  true
Is a2 equal to a3:  false
Thứ Sáu, 18/04/2025 09:45
51 👨 78
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng