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
  • asp之家 网络编程 m.aspxhome.com