如何在Go语言中比较两个包含指针字段的结构体实例?
在Go语言中,指针是存储其他变量地址的变量。结构体是面向对象编程中类的对应物,可以将不同的字段放在结构体中,这些字段可以在以后实现,并且它们具有int、float、string等类型。在本文中,我们将编写一个Go语言程序来比较两个包含指针作为字段的结构体实例。
将变量“b”的地址赋给变量“a”的数学表示:
a = &b
& 表示地址运算符,它接收变量b的内存地址并将其赋值给变量a。
算法
步骤1 − 此程序导入main和fmt作为必要的包
步骤2 − 创建一个Employee结构体,其中包含两个字段:Name(字符串类型)和age(整数类型)
步骤3 − 创建一个main函数
步骤4 − 在main函数中,创建一个e1变量,并使用取地址运算符(&)将其赋值为初始化值。
步骤5 − 在此步骤中,创建一个e2变量,并使用取地址运算符(&)将其赋值为新的字段值。
步骤6 − 然后,赋值e3=e1
步骤7 − 在此步骤中,检查e1和e2是否相等,在第二种情况下检查e1和e3是否相等。
步骤8 − 将返回一个布尔值,该值将使用fmt包中的Println函数打印到控制台(ln表示换行)。
示例1
在这个例子中,我们将编写一个Go语言程序,使用包含Name和Age两个字段的Employee结构体来比较两个结构体实例。
package main import "fmt" type Employee struct { Name string Age int } func main() { e1 := &Employee{Name: "Karan", Age: 28} e2 := &Employee{Name: "Robin", Age: 35} e3 := e1 fmt.Println("Is e1 is equal to e2?") fmt.Println(e1 == e2) fmt.Println("Is e1 equal to e3?") fmt.Println(e1 == e3) }
输出
Is e1 is equal to e2? false Is e1 equal to e3? true
示例2
在这个例子中,我们将编写一个Go语言程序,使用包含Model和Year两个字段的Car结构体来比较两个结构体实例。
package main import "fmt" type Car struct { Model string Year int } func main() { c1 := &Car{Model: "Suzuki", Year: 2022} c2 := &Car{Model: "Hyundai", Year: 2019} c3 := c2 fmt.Println("is c1 equal to c2?") fmt.Println(c1 == c2) fmt.Println("is derefrenced c2 is equal to c3?") fmt.Println(*c2 == *c3) fmt.Println("Is the model and year of c1 and c2 same?") fmt.Println(c1.Model == c2.Model && c1.Year == c2.Year) fmt.Println("Is c1 equal to c3?") fmt.Println(c1 == c3) }
输出
is c1 equal to c2? false is derefrenced c2 is equal to c3? true Is the model and year of c1 and c2 same? false Is c1 equal to c3? false
结论
在本文中,我们探讨了使用两个示例比较包含指针字段的两个结构体的程序。在第一个示例中,我们使用了Employee结构体;在第二个示例中,我们使用了Car结构体。
广告