美文网首页
go 接口赋值和相等 需要注意的地方

go 接口赋值和相等 需要注意的地方

作者: phu | 来源:发表于2018-09-18 11:04 被阅读0次

第一个接口:
package one

type ReadWriter interface { Read(buf []byte) (n int, err error)
Write(buf []byte) (n int, err error)
}
第二个接口位于另一个包中:
package two

type IStream interface { Write(buf []byte) (n int, err error)
Read(buf []byte) (n int, err error) }

在Go语言中,这两个接口实际上并无区别,因为:  任何实现了one.ReadWriter接口的类,均实现了two.IStream;  任何one.ReadWriter接口对象可赋值给two.IStream,反之亦然;  在任何地方使用one.ReadWriter接口与使用two.IStream并无差异

以下这些代码可编译通过:
var file1 two.IStream = new(File)
var file2 one.ReadWriter = file1
var file3 two.IStream = file2

接口赋值并不要求两个接口必须等价。如果接口A的方法列表是接口B的方法列表的子集, 那么接口B可以赋值给接口A。例如,假设我们有Writer接口:
type Writer interface { Write(buf []byte) (n int, err error) }
就可以将上面的one.ReadWriter和two.IStream接口的实例赋值给Writer接口:
var file1 two.IStream = new(File)
var file4 Writer = file1
但是反过来并不成立:
var file1 Writer = new(File)
var file5 two.IStream = file1
// 编译不能通过 这段代码无法编译通过,原因是显然的:file1并没有Read()方法。

相关文章

  • go 接口赋值和相等 需要注意的地方

    第一个接口:package one type ReadWriter interface { Read(bu...

  • 2018-08-17javascript(2)基本语法之条件语句

    一:条件语句 1.if结构 注意if后面的表达式之中要混淆了赋值表达式(=),严格相等运算符(===),和相等运算...

  • 设计模式 - 原型模式

    注意深复制与浅赋值的问题 C#中如果需要实现深复制,必须实现 ICloneable 接口。

  • 变量的解构赋值

    1.数组的解构赋值 基本用法: 默认值 解构赋值允许指定默认值。 注意,ES6 内部使用严格相等运算符(===),...

  • day7-拷贝相关

    一.==和is ==——判断两个数据的值是否相等is——判断地址是否相等python数据存储: 给变量赋值的时候,...

  • go 数据类型、标识符、关键字

    var是变量声明, 后面跟变量,然后变量类型 =右边是赋值go 也支持多个赋值,=左边是需要赋值的多个变量,用逗号...

  • C语言快速入门:赋值

    赋值运算符 在C语言中,相等号(=)称为赋值运算符,而不是表示两个数值是否相等。赋值语句是由赋值表达式再加上分号构...

  • 解构赋值

    解构赋值 解构赋值可分为数组解构赋值和对象解构赋值,数组解构赋值要求右侧必须可迭代(具有Iterator 接口),...

  • Swift(七)基本运算

    赋值运算 复制运算中需要注意一点就是, 与 C 和 Objective - C 的赋值运算符不同,Swift 的赋...

  • go json标准库需要注意的地方

    今天做小程序,获取小程序openId,http返回的json是 这种情况直接使用 json.Unmarshal(...

网友评论

      本文标题:go 接口赋值和相等 需要注意的地方

      本文链接:https://www.haomeiwen.com/subject/iynynftx.html