在接口上调用方法时,必须有和方法定义时相同的接收者类型或者是可以从具体类型 P 直接可以辨识的:

  • 指针方法可以通过指针调用
  • 值方法可以通过值调用
  • 接收者是值的方法可以通过指针调用,因为指针会首先被解引用
  • 接收者是指针的方法不可以通过值调用,因为存储在接口中的值没有地址

将一个值赋值给一个接口时,编译器会确保所有可能的接口方法都可以在此值上被调用,因此不正确的赋值在编译期就会失败。

package mainimport ("fmt"
)type List []intfunc (l List) Len() int {return len(l)
}func (l *List) Append(val int) {*l = append(*l, val)
}type Appender interface {Append(int)
}func CountInto(a Appender, start, end int) {for i := start; i <= end; i++ {a.Append(i)}
}type Lener interface {Len() int
}func LongEnough(l Lener) bool {return l.Len()*10 > 42
}func main() {// A bare valuevar lst List// compiler error:// cannot use lst (type List) as type Appender in argument to CountInto://       List does not implement Appender (Append method has pointer receiver)// CountInto(lst, 1, 10)if LongEnough(lst) { // VALID:Identical receiver typefmt.Printf("- lst is long enough\n")}// A pointer valueplst := new(List)CountInto(plst, 1, 10) //VALID:Identical receiver typeif LongEnough(plst) {// VALID: a *List can be dereferenced for the receiverfmt.Printf("- plst is long enough\n")}
}

lst 上调用 CountInto 时会导致一个编译器错误,因为 CountInto 需要一个 Appender,而它的方法 Append 只定义在指针上。 在 lst 上调用 LongEnough 是可以的,因为 Len 定义在值上。

plst 上调用 CountInto 是可以的,因为 CountInto 需要一个 Appender,并且它的方法 Append 定义在指针上。 在 plst 上调用 LongEnough 也是可以的,因为指针会被自动解引用。

go语言 调用接口的方法相关推荐

  1. 调用接口的方法 java_java调用接口的方法

    java调用接口的方法 发布时间:2020-06-24 10:42:58 来源:亿速云 阅读:85 作者:Leah 这期内容当中的小编将会给大家带来有关java调用接口的方法,以专业的角度为大家分析和 ...

  2. c 语言调用java_C语言调用java的方法

    C语言调用java的方法 发布时间:2020-07-01 11:01:25 来源:亿速云 阅读:86 作者:Leah 本篇文章为大家展示了C语言调用java的方法,代码简明扼要并且容易理解,绝对能使你 ...

  3. vue三种调用接口的方法

    注:此博客仅用于学习,自己还处于菜鸟阶段,希望给相同处境的人提供一个可参考的博客.如果您觉得不合理,您的指导,非常欢迎,但请不要否定别人的努力,谢谢您了! vue三种调用接口的方法 1. this.$ ...

  4. ajaxsetup获取ajax的url_跨域调用接口的方法之一:$.ajaxSetup()

    跨域查询接口的数据,之前在公司时有发生过,产生的原因是,本地请求的域名或IP地址不一致,解除方法,也是修改域名和IP地址.比如: 接口中的数据来自IP地址:192.168.1.23/get.php 如 ...

  5. java接口的默认方法,实现类调用接口默认方法

    概述 Java8带来了一些全新的特性,包括lambda表达式.函数接口.方法引用.流.可选方法.接口中的静态方法和默认方法. 在本文中,我们将深入讨论为什么java8接口新增了默认方法,如何使用默认方 ...

  6. c语言调用函数的方法案例,C语言经典例题100例——C语言练习实例34解答(函数调用)...

    题目:练习函数调用. 程序分析:无. 程序源代码: // 百宝箱工作室 官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.baibaox.com ...

  7. php调用接口的方法 curl

    /*      * 调用身份验证的接      */     public function  authenticationApi($data){         $uri = "http: ...

  8. C语言调用API的方法

    #include <windows.h> int main()                    {     MessageBox (NULL,"Hello,World!&q ...

  9. python 接口测试 url_Python 接口测试之接口请求方法封装

    引言 前面讲过三篇文章: 既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法了,方法有get,post,put,delete,具体是选择哪种,我们需要根据不同接口规定好请求方法来 ...

  10. 【JDK8 新特性2】JDK 8 接口默认方法/静态方法

    目录 1.接口默认方法 1.1 接口默认方法的定义格式 1.2 接口默认方法的使用 1.2.1 实现类直接调用接口默认方法 1.2.2 实现类重写接口默认方法 2.接口静态方法 2.1 接口静态方法的 ...

最新文章

  1. 数字化探索:建立学习型组织,HR 也能驱动业务营收?
  2. Win32多线程编程(1) — 基础概念篇
  3. Scala _03方法与函数
  4. 利用代码生成right scope数据
  5. Springmvc中提交from之后不跳转不进控制器
  6. axios 设置拦截器 全局设置带默认参数(发送 token 等)
  7. 注意力机制--转载自我的学生隆兴写的博客
  8. 【Linux】kali linux 安装 google chrome
  9. [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法
  10. linux 之 sed
  11. 英飞凌TC297 PSPR与DSPR
  12. Harry Potter and the Goblet of Fire
  13. 格式化后如何恢复数据?
  14. 经纬度相关公式及实现
  15. linux 查看当前用户和组的信息,Linux查看所有用户和组信息
  16. Android P HAL层添加HIDL实例(详细实现步骤)
  17. 图片浏览器功能的实现(一)——图片放大与缩小功能实现
  18. 解决c3p0连接池异常问题
  19. 关闭占用端口号的程序
  20. 【三维目标检测】Second 模型 (二)

热门文章

  1. 【历史上的今天】12 月 1 日:新浪网成立;钉钉上线;古登堡计划发布
  2. 深层网络梯度消失-爆炸原因
  3. 安装windows server 2003两种授权模式之间的区别
  4. 教授专栏14 | 陈泰元: 提升公司治理之路--高管薪酬追回条款
  5. 谷歌云没有信用卡怎么注册服务器,谷歌云免费服务器申请方法
  6. ifconfig创建sit隧道
  7. 三分钟快速理顺HTMLJSP中单、双引号用法、含义
  8. 市场调研报告-全球与中国商业门窗五金市场现状及未来发展趋势
  9. qt信号阻塞blockSignals的运用
  10. 单体架构常用注解合集