MST

星途 面试题库

面试题:Go语言中方法集的基本概念及构成

请简述Go语言中方法集的概念,并说明方法集是如何构成的。同时,举例说明如何为一个结构体类型定义方法集。
47.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

方法集概念

在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())
}