Golang | 方法集的那些事

本文探讨了Golang中方法集的概念,指出可寻址的类型值可以调用指针接收者的方法。不可寻址的值,如常量、基本类型和运算结果,仅能调用值接收者的方法。文中建议使用指针接收者以支持修改接收者值并优化内存和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型的值也可以调用指针接收者的方法!

image-20210626091914165

学习golang中关于方法部分知识的人一定了解过方法集(Method Set)的概念,也一定对上面这张图不陌生,方法集定义如下规则:

规则:

  1. 类型的值的方法集只包含值接收者声明的方法

  2. 指向 T 类型的指针的方法集既包含值接收者声明的方法,也包含指针接收者声明的方法

实际使用过程中会发现,在T的值可寻址的情况下,类型的值也可以调用指针接收者的方法

package main

import "fmt"

type baseImpl string

const (
    BI = baseImpl("1234")
)

type base interface {
    func1 ()
}

func (b *baseImpl) func1() {
    fmt.Println("invoke base impl func1")
}

func main() {
    bi := baseImpl("1234")
    bi.func1() // 正常执行,输出 "invoke base impl func1"
    BI.func1() // 编译器报错,Cannot call a pointer method on 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值