Go 一般方法与接口方法接收者的差异详解
作者:cainmusic 时间:2024-04-27 15:38:52
Go语言中,一般方法接收者和接口方法接收者有一定区别
在一般方法中
若定义的接收者是值,可以使用值或者指针进行调用;
若定义的接收者是指针,可以使用值或者指针进行调用。
在接口方法中
若定义的接收者是值,则既可以用接口值调用,也可以用接口指针调用;
若定义的接收者是指针,则只能用接口指针调用,不能用接口值调用。
如下例:
package main
import "fmt"
type T struct {
S string
}
type I interface {
A()
B()
}
func (t T) A() {
fmt.Println(t.S)
}
func (t *T) B() {
fmt.Println(t.S)
}
func main() {
t := T{"normal method"}
pt := &t
t.A()
t.B()
pt.A()
pt.B()
//var i I = T{"interface method"}
var i I = &T{"interface method"}
i.A()
i.B()
}
若使用var i I = &T{"interface method"}
则可以执行。
若使用var i I = T{"interface method"}
则报错:
./prog.go:30:6: cannot use T{...} (type T) as type I in assignment:
T does not implement I (B method has pointer receiver)
提示B方法用的是指针接收者(pointer receiver),无法被接口值调用。
那么,为何会有这样的差异?更多关于Go 方法不同接收者差异的资料请关注asp之家其它相关文章!
来源:https://segmentfault.com/a/1190000041260070
标签:Go,接收差异,一般方法,接口方法
0
投稿
猜你喜欢
numpy.random.shuffle打乱顺序函数的实现
2021-02-04 07:19:34
如何在页面中快捷地添加翻页按钮?
2010-06-26 12:33:00
让ASP组件来保护你的网站,自定义加密方法的使用
2009-11-07 19:27:00
Atlas—微软的Ajax工具包
2007-09-07 09:52:00
django2.0扩展用户字段示例
2023-08-31 11:10:10
CSS:浮动清理另类方法
2008-11-17 11:45:00
Python抓取电影天堂电影信息的代码
2023-07-23 17:18:49
Pycharm开发Django项目创建ORM模型的问题
2022-11-09 06:00:48
MySQL命令行导出与导入数据库
2024-01-14 03:30:14
SQL Server端口更改后的数据库连接方式
2008-12-29 14:11:00
Django中的CACHE_BACKEND参数和站点级Cache设置
2022-03-19 11:54:47
TensorFlow实现从txt文件读取数据
2021-03-02 21:04:59
基于PyQt5制作一个数据图表生成器
2022-08-11 16:20:25
属性与 @property 方法让你的python更高效
2023-02-02 08:20:18
python OpenCV计算图片相似度的5种算法
2023-12-31 15:59:14
Python+Tkinter制作专属图形化界面
2022-10-26 23:31:19
Python多进程共享numpy 数组的方法
2023-12-02 07:47:17
6行的js上下滑动广告效果
2008-11-27 12:26:00
深入理解Go语言中的Dispatcher
2024-02-03 03:27:18
SQL Server性能调优之缓存
2024-01-25 04:30:08