面试题答案
一键面试方法集概念
在Go语言中,方法集是与特定类型相关联的一组方法。它定义了该类型的值(包括指针值和非指针值)可以调用的方法集合。
方法集构成
- 对于非指针接收器类型的方法,其方法集包含这些方法,并且该类型的实例(值)和指向该类型实例的指针都可以调用这些方法。
- 对于指针接收器类型的方法,只有指向该类型实例的指针才能调用这些方法,该类型的实例(值)不能直接调用。
示例
package main
import "fmt"
// 定义结构体
type Rectangle struct {
width, height float64
}
// 为Rectangle定义非指针接收器方法
func (r Rectangle) Area() float64 {
return r.width * r.height
}
// 为Rectangle定义指针接收器方法
func (r *Rectangle) Scale(factor float64) {
r.width *= factor
r.height *= factor
}
在上述代码中,Rectangle
结构体有两个方法,Area
是使用非指针接收器定义的方法,Scale
是使用指针接收器定义的方法。Rectangle
类型的值和指针都能调用 Area
方法,而只有 Rectangle
类型的指针能调用 Scale
方法。例如:
func main() {
r1 := Rectangle{width: 10, height: 5}
fmt.Println("Area of r1:", r1.Area())
r2 := &Rectangle{width: 10, height: 5}
r2.Scale(2)
fmt.Println("Area of r2 after scale:", r2.Area())
}