脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - Go 一般方法与接口方法接收者的差异详解

Go 一般方法与接口方法接收者的差异详解

2023-05-16 15:23cainmusic Golang

这篇文章主要为大家介绍了Go 一般方法与接口方法接收者的差异详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Go语言中,一般方法接收者和接口方法接收者有一定区别

  • 在一般方法中

若定义的接收者是值,可以使用值或者指针进行调用;

若定义的接收者是指针,可以使用值或者指针进行调用。

  • 在接口方法中

若定义的接收者是值,则既可以用接口值调用,也可以用接口指针调用;

若定义的接收者是指针,则只能用接口指针调用,不能用接口值调用。

如下例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 方法不同接收者差异的资料请关注服务器之家其它相关文章!

原文链接:https://segmentfault.com/a/1190000041260070

延伸 · 阅读

精彩推荐
  • GolangGo 中如何强制关闭 TCP 连接

    Go 中如何强制关闭 TCP 连接

    本文我们介绍了 TCP 默认关闭与强制关闭两种方式(其实还有种折中的方式:SetLinger(sec > 0)),它们都源于 TCP 的协议设计。...

    Golang技术分享10612021-09-27
  • Golanggolang包循环引用的几种解决方案总结

    golang包循环引用的几种解决方案总结

    golang有包循环引用问题,用过的应该都知道,下面这篇文章主要给大家介绍了关于golang包循环引用的几种解决方案,文中通过实例代码介绍的非常详细,需要的朋...

    云满笔记7572022-11-21
  • Golanggo实现Redis读写分离示例详解

    go实现Redis读写分离示例详解

    本篇文章将介绍Redis通信协议RESP, 而后在使用go来编写一个中间件,从而来完成Redis读写分离,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多...

    pdudo5682022-08-31
  • GolangGo并发编程中sync/errGroup的使用

    Go并发编程中sync/errGroup的使用

    本文主要介绍了Go并发编程中sync/errGroup的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    深度思维者7712022-01-22
  • Golanggolang判断chan channel是否关闭的方法

    golang判断chan channel是否关闭的方法

    这篇文章主要介绍了golang判断chan channel是否关闭的方法,结合实例形式对比分析了Go语言判断chan没有关闭的后果及关闭的方法,需要的朋友可以参考下 ...

    dotcoo12352020-04-29
  • GolangGolang开发gRPC服务入门介绍

    Golang开发gRPC服务入门介绍

    这篇文章主要介绍了Golang开发gRPC服务,Golang开发gRPC应用程序的套路也已经很清晰,这篇文章就来做一个简单的介绍,算是入门,需要的朋友可以参考下...

    波斯马11352022-09-25
  • Golanggolang实现一个简单的websocket聊天室功能

    golang实现一个简单的websocket聊天室功能

    这篇文章主要介绍了golang实现一个简单的websocket聊天室功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    CNBLOG9232021-11-18
  • GolangGolang配置管理库 Viper的教程详解

    Golang配置管理库 Viper的教程详解

    这篇文章主要介绍了Golang 配置管理库 Viper,使用 viper 能够很好的去管理你的配置文件信息,比如数据库的账号密码,服务器监听的端口,你可以通过更改配...

    是记忆啦4232022-10-11