01.结构体和方法
结构体(Struct)和方法(Method)是 Go 语言中非常重要的概念,用于定义自定义类型和该类型的行为。让我们来看一下结构体和方法在 Go 中的基本用法和示例。
结构体(Struct)
结构体是一种用户自定义的数据类型,用于封装多个不同类型的数据字段。在结构体中,这些字段被称为结构体的成员(Fields)。
定义结构体
结构体通过 type
和 struct
关键字定义,如下所示:
package main import "fmt" // 定义结构体 type Person struct { Name string Age int Gender string } func main() { // 创建结构体实例 var p1 Person p1.Name = "Alice" p1.Age = 30 p1.Gender = "Female" fmt.Println(p1) // 输出:{Alice 30 Female} // 另一种初始化方式 p2 := Person{"Bob", 25, "Male"} fmt.Println(p2) // 输出:{Bob 25 Male} }
匿名结构体
可以在定义时不指定结构体的名称,称为匿名结构体。通常用于临时数据结构的定义:
package main import "fmt" func main() { // 定义匿名结构体 p := struct { Name string Age int Gender string }{ Name: "Alice", Age: 30, Gender: "Female", } fmt.Println(p) // 输出:{Alice 30 Female} }
方法(Method)
方法是一种与结构体关联的函数,允许结构体实例执行特定的操作。在 Go 中,方法是通过将函数与特定类型关联而实现的。
定义方法
方法的定义与普通函数类似,但在函数名前面加上接收者(Receiver),即方法所属的结构体类型。
package main import "fmt" // 定义结构体 type Rectangle struct { Width float64 Height float64 } // 定义方法:计算面积 func (r Rectangle) Area() float64 { return r.Width * r.Height } func main() { // 创建结构体实例 rect := Rectangle{Width: 10, Height: 5} // 调用方法 fmt.Println("Width:", rect.Width) fmt.Println("Height:", rect.Height) fmt.Println("Area:", rect.Area()) // 调用结构体的方法计算面积 }
在上面的例子中,Area()
方法属于 Rectangle
结构体,通过 (r Rectangle)
指定了该方法的接收者是 Rectangle
类型的实例 r
。通过这种方式,可以在方法内部访问和操作结构体的字段。
小结
- 结构体用于封装多个字段,定义自定义的复合数据类型。
- 方法是与结构体关联的函数,允许对结构体实例进行操作和处理。
- 使用结构体和方法可以更加灵活和清晰地组织代码,提高代码的可读性和可维护性。