go语言 调用接口的方法
在接口上调用方法时,必须有和方法定义时相同的接收者类型或者是可以从具体类型 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语言 调用接口的方法相关推荐
- 调用接口的方法 java_java调用接口的方法
java调用接口的方法 发布时间:2020-06-24 10:42:58 来源:亿速云 阅读:85 作者:Leah 这期内容当中的小编将会给大家带来有关java调用接口的方法,以专业的角度为大家分析和 ...
- c 语言调用java_C语言调用java的方法
C语言调用java的方法 发布时间:2020-07-01 11:01:25 来源:亿速云 阅读:86 作者:Leah 本篇文章为大家展示了C语言调用java的方法,代码简明扼要并且容易理解,绝对能使你 ...
- vue三种调用接口的方法
注:此博客仅用于学习,自己还处于菜鸟阶段,希望给相同处境的人提供一个可参考的博客.如果您觉得不合理,您的指导,非常欢迎,但请不要否定别人的努力,谢谢您了! vue三种调用接口的方法 1. this.$ ...
- ajaxsetup获取ajax的url_跨域调用接口的方法之一:$.ajaxSetup()
跨域查询接口的数据,之前在公司时有发生过,产生的原因是,本地请求的域名或IP地址不一致,解除方法,也是修改域名和IP地址.比如: 接口中的数据来自IP地址:192.168.1.23/get.php 如 ...
- java接口的默认方法,实现类调用接口默认方法
概述 Java8带来了一些全新的特性,包括lambda表达式.函数接口.方法引用.流.可选方法.接口中的静态方法和默认方法. 在本文中,我们将深入讨论为什么java8接口新增了默认方法,如何使用默认方 ...
- c语言调用函数的方法案例,C语言经典例题100例——C语言练习实例34解答(函数调用)...
题目:练习函数调用. 程序分析:无. 程序源代码: // 百宝箱工作室 官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.baibaox.com ...
- php调用接口的方法 curl
/* * 调用身份验证的接 */ public function authenticationApi($data){ $uri = "http: ...
- C语言调用API的方法
#include <windows.h> int main() { MessageBox (NULL,"Hello,World!&q ...
- python 接口测试 url_Python 接口测试之接口请求方法封装
引言 前面讲过三篇文章: 既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法了,方法有get,post,put,delete,具体是选择哪种,我们需要根据不同接口规定好请求方法来 ...
- 【JDK8 新特性2】JDK 8 接口默认方法/静态方法
目录 1.接口默认方法 1.1 接口默认方法的定义格式 1.2 接口默认方法的使用 1.2.1 实现类直接调用接口默认方法 1.2.2 实现类重写接口默认方法 2.接口静态方法 2.1 接口静态方法的 ...
最新文章
- 数字化探索:建立学习型组织,HR 也能驱动业务营收?
- Win32多线程编程(1) — 基础概念篇
- Scala _03方法与函数
- 利用代码生成right scope数据
- Springmvc中提交from之后不跳转不进控制器
- axios 设置拦截器 全局设置带默认参数(发送 token 等)
- 注意力机制--转载自我的学生隆兴写的博客
- 【Linux】kali linux 安装 google chrome
- [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法
- linux 之 sed
- 英飞凌TC297 PSPR与DSPR
- Harry Potter and the Goblet of Fire
- 格式化后如何恢复数据?
- 经纬度相关公式及实现
- linux 查看当前用户和组的信息,Linux查看所有用户和组信息
- Android P HAL层添加HIDL实例(详细实现步骤)
- 图片浏览器功能的实现(一)——图片放大与缩小功能实现
- 解决c3p0连接池异常问题
- 关闭占用端口号的程序
- 【三维目标检测】Second 模型 (二)