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