golang中的接口实现(二)
指针类型 vs 值类型实现接口
package main
import (
"fmt"
)
// 定义接口
type Describer interface {
Describe()
}
// 定义一个类
type Person struct {
name string
age int
}
// 值类型的Person 实现了 Describe 方法
func (p Person) Describe() {
fmt.Printf("%s is %d years old\n", p.name, p.age)
}
// 定义一个类
type Address struct {
province string // 省
city string // 市
}
// 指针类型的 Address 实现了 Describe方法
func (a *Address) Describe() {
fmt.Printf("%s省 %s市 \n", a.province, a.city)
fmt.Println("35", &a)
}
func main() {
var d1 Describer // 接口类型变量
p1 := Person{"Sheldon", 18}
d1 = p1 //值类型
d1.Describe()
p2 := Person{"Leonard", 20}
d1 = &p2 // 指针类型
d1.Describe()
var d2 Describer
a1 := Address{"山东", "临沂"}
//d2 = a1 // tip ①
d2 = &a1
d2.Describe()
a1.Describe()
return
// ① &a1(*Address) 实现了 Describe 方法, 而 a1(值类型)没有实现Describe方法,
// 所以只有指针类型的 Address 对象可以转换为 Describe 接口对象。
实现多个接口
package main
import "fmt"
// 定义接口1
type Animal interface {
Eat()
}
// 定义接口2
type People interface {
Talk()
}
type Man struct {
name string
age int
}
// 实现接口1
func (m Man) Eat() {
fmt.Println("男人吃东西")
}
// 实现接口2
func (m Man)Talk() {
fmt.Println("男人讲话")
}
func main() {
var sheldon Man
sheldon.Eat()
sheldon.Talk()
}
接口的嵌套
(go 中没有类似 Java,C# 中的父类这种东西, 但是可以通过嵌入其他接口来创建新的接口.)
type Interface111 interface {
Method111()
}
type Interface222 interface {
Method222() int
}
type EmployeeOperations interface {
Interface111
Interface222
}
type Employee struct {
}
func (e Employee) Method111() {
}
func (e Employee) Method222() int {
return 18
}
func main() {
e := Employee{ }
var empOp EmployeeOperations = e
empOp.Method111() // 大接口对象操作方法
var i2 Interface111 = e
i2.Method111() // 小接口对象操作方法
}
接口零值
type Interface111 interface {
Method111()
}
func main() {
var i1 Interface111
if i1 == nil { ①
fmt.Printf("i1 is nil and 类型: %T 值: %v\n", i1, i1)
// i1 is nil and 类型: <nil> 值: <nil>
} else {
i1.Method111()
}
}
// ① 使用 nil 接口对象调用方法的话,则程序会 panic,
// 因为 nil interface既没有底层的值也没有对应的具体类型. 类似于 JAVA 的空指针异常!
golang中的接口实现(二)的更多相关文章
- golang中的接口值
package main import ( "bytes" "fmt" "io" ) // 此处的w参数默认是一个空接口,当传递进来buf参 ...
- golang中的接口实现(一)
golang中的接口实现 // 定义一个接口 type People interface { getAge() int // 定义抽象方法1 getName() string // 定义抽象方法2 } ...
- golang中的接口
CSDN找的一个网页,照着抄练一次. 差不多的使用场景都在了. package main import ( "fmt" ) type People interface { Retu ...
- 七、golang中接口、反射
一.接口定义 1.定义 interface类型可以定义一组方法,但是这些不需要实现,并且interface不能包含任何变量 package main import ( "fmt" ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Golang中的坑二
Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...
- golang中接口interface和struct结构类的分析
再golang中,我们要充分理解interface和struct这两种数据类型.为此,我们需要优先理解type的作用. type是golang语言中定义数据类型的唯一关键字.对于type中的匿名成员和 ...
- Java学习笔记二十八:Java中的接口
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
随机推荐
- Windwos下Tomcat的安装与配置
一.准备工作 1. JDK环境,可参考https://www.cnblogs.com/eagle6688/p/7873477.html 2. Eclipse 3. Tomcat安装包和源码包 二.下载 ...
- PHP中eval函数的危害与正确禁用方法
其实 eval()是无法用php.ini中的 disable_functions禁止掉的 :eval是zend的,因此不是PHP_FUNCTION 函数: 如果想禁掉eval可以用php的扩展 Suh ...
- dell 远程管理卡的使用racadm
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html 可以直接在浏览器输入管理卡的地址-用户名-密码页面操作 也可以通过命 ...
- C#6.0语言规范(十二) 数组
数组是一种数据结构,包含许多通过计算索引访问的变量.包含在数组中的变量(也称为数组的元素)都是相同的类型,这种类型称为数组的元素类型. 数组具有确定与每个数组元素相关联的索引数的等级.数组的等级也称为 ...
- TCP连接详解
一. 连接过程示意图 二. 建立TCP连接 2.1 三次握手 第一次握手:建立连接.客户端发送连接请求报文段,将SYN置为1,Sequence Number为x:然后,客户端进入SYN_SEND状态, ...
- axios请求拦截及请求超时重新请求设置
自从使用Vue2之后,就使用官方推荐的axios的插件来调用API,在使用过程中,需要解决问题: 1. 请求带token校验 2. post请求请求体处理 3. 响应未登录跳转登录页处理 4. 响应错 ...
- linux安装mysql数据库和简单配置
- [Leetcode]315.计算右侧小于当前元素的个数 (6种方法)
链接 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例: 输 ...
- MVC3学习:Sql Server2005中时间类型DateTime的显示
在Sql Server2005中,如果将某字段定义成日期时间类型DateTime,那么在视图中会默认显示成年月日时分秒的方式(如 2013/8/6 13:37:33) 如果只想显示成年月日形式,不要时 ...
- (转载)Centos下Elasticsearch安装详细教程
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...