Go语言之Interface(二)
使用指针接收器和值接收器实现接口
type Describer interface {
    Describe()
}
type Person struct {
    name string
    age  int
}
func (p Person) Describe() {
    fmt.Printf("%s is %d years old\n", p.name, p.age)
}
type Address struct {
    state   string
    country string
}
func (a *Address) Describe() {
    fmt.Printf("State %s Country %s", a.state, a.country)
}
    var d1 Describer
    p1 := Person{"Sam", 25}
    d1 = p1
    d1.Describe()
    p2 := Person{"James", 39}
    d1 = &p2
    d1.Describe()
    var d2 Describer
    a := Address{"Beijing", "China"}
    d2 = &a
    d2.Describe()
实现多个接口
type NormalSalary interface {
    DisplaySalary()
}
type LevaeSalary interface {
    CalculateLeaveLeft() int
}
type Employee struct {
    firstName   string
    lastName    string
    basicPay    int
    pf          int
    totalLeaves int
    leavesTaken int
}
func (e Employee) DisplaySalary() {
    fmt.Printf("%s %s has salary $%d\n", e.firstName, e.lastName, (e.basicPay + e.pf))
}
func (e Employee) CalculateLeaveLeft() int {
    return e.totalLeaves - e.leavesTaken
}
    e := Employee{
        firstName:   "Kevin",
        lastName:    "Lee",
        basicPay:    5000,
        pf:          200,
        totalLeaves: 30,
        leavesTaken: 5,
    }
    var ns NormalSalary = e
    ns.DisplaySalary()
    var l LevaeSalary = e
    fmt.Println("Leaves left =", l.CalculateLeaveLeft())
接口嵌套
在Go语言中没有继承的概念,但是通过组合可以实现继承的效果
type NormalSalary interface {
    DisplaySalary()
}
type LevaeSalary interface {
    CalculateLeaveLeft() int
}
type SalaryOperator interface {
    NormalSalary
    LevaeSalary
}
    var empOp SalaryOperator = e
    empOp.DisplaySalary()
    fmt.Println("Leaves left = ", empOp.CalculateLeaveLeft())
接口零值
零值接口是nil,nil接口中的type和value都是nil
type Describer interface {
    Describe()
}
    var d4 Describer
    if d4 == nil {
        fmt.Printf("d4 is nil and has type %T value %v\n", d4, d4)
    }
输出结果是
d4 is nil and has type <nil> value <nil>
												
											Go语言之Interface(二)的更多相关文章
- Go语言基础(二)
		
Go语言基础(二) 跟着上篇,继续看Go基础 一.变量作用域 与C类似,有全局变量.局部变量.形参之分 package main import "fmt" // 全局变量 var ...
 - Go语言学习笔记二: 变量
		
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
 - Go 语言入门(二)方法和接口
		
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...
 - 浅析Go语言的Interface机制
		
前几日一朋友在学GO,问了我一些interface机制的问题.试着解释发现自己也不是太清楚,所以今天下午特意查了资料和阅读GO的源码(基于go1.4),整理出了此文.如果有错误的地方还望指正. GO语 ...
 - Java语言基础(二) Java关键字
		
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
 - Java语言基础(二)
		
Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...
 - R语言语法基础二
		
R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...
 - Go语言之Interface(一)
		
Go语言之Interface(一) 什么是interface 在面向对象语言中接口是:接口定义了一个对象的行为,但在Go中接口就是方法签名的集合,当一个类型提供了这个接口中的所有的方法,就可以说这个类 ...
 - C语言第十二讲,文件操作.
		
C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...
 
随机推荐
- windows 上安装冷门python模块
			
最近在逼乎看到 笑虎大大 的python 撸代码学知识专栏..就下载他的Pspider 框架 安装了一下,准备耍耍. 由于是在Windows下的pycharm 有个 pybloom_live 模块 老 ...
 - pychrom 中文版
			
http://jingyan.baidu.com/article/a378c960daf80eb328283033.html
 - MySQL中 DECIMAL FLOAT DOUBLE的区别
			
第一篇文章: MySQL中Decimal类型和Float Double等区别 MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,d ...
 - C语言函数指针与 c#委托和事件对比
			
C语言: 函数指针可以节省部分代码量,写类似具有多态的函数,比如要比较最大值,如果不用函数指针就只能写比较某一类型比如int类型的max函数,这个max无法比较string的大小.函数指针的意义就不多 ...
 - 2019.03.15王苛震——myls
			
/* 1.尝试实现ls命令的功能 加选项-l -a -i -h */ #include <stdio.h> #include <sys/types.h> #include &l ...
 - 一个简单的TensorFlow可视化MNIST数据集识别程序
			
下面是TensorFlow可视化MNIST数据集识别程序,可视化内容是,TensorFlow计算图,表(loss, 直方图, 标准差(stddev)) # -*- coding: utf-8 -*- ...
 - 使用idea搭建maven-web项目
			
使用idea搭建maven-web项目 1.用idea搭建项目:File--new--project 2.选择jdk版本,选择Maven-archetype-webapp来创建maven-web项目如 ...
 - Windows和Office激活汇总
			
Windows和Office是常用的软件.多数情况下,即使不激活,也会使用一部分功能.今天来看一下很多前辈的工作成果. 1. Windows 7&10 1.1 永久激活 通过key 分享几个常 ...
 - 我们的爬虫从pyspider开始说起(一)
			
看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”.所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步. 先来说这几天遇到 ...
 - 第4周小组作业:WordCount优化
			
Github项目地址:https://github.com/chaseMengdi/wcPro stage1:代码编写+单元测试 PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分 ...