Golang之接口(interface)
Golang最重要的接口,,,,
package main import (
"fmt"
) //interface类型默认是指针
/*
接口的实现
Golang中的接口,不需要显示的实现。只需要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口
因为Golang中没有implement类似的关键字
如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口
如果一个变量只含有了1个interface的部分方法,那么这个变量没有实现这个接口.. 一种事物的多种形态,都可以按照统一的接口进行操作 */ //接口嵌套
type ReadWrite interface {
Read(b Buffer) bool
Write(b Buffer) bool
}
type Lock interface {
Lock()
Unlock()
}
//嵌套,继承了前面四个方法,File就有6个方法
type File interface {
ReadWrite
Lock
Close()
}
//类型断言,由于接口是一般类型,不知道具体类型,如果要转成具体类型可以采用以下方法进行转换
var t int
var x interface{}
x=t
y,ok=x.(int) //定义People结构体
type People struct {
name string
age int
} //定义Test接口
type Test interface {
//接口有2个方法
Print()
Sleep()
} //定义struct
type Student struct {
name string
age int
score int
} //定义Print()方法
func (p Student) Print() {
fmt.Println("name:", p.name)
fmt.Println("age:", p.age)
fmt.Println("score", p.score)
} //Sleep方法
func (p Student) Sleep() {
fmt.Println("student sleep")
}
func (people People) Print() {
fmt.Println("name:", people.name)
fmt.Println("age:", people.age)
}
func (p People) Sleep() {
fmt.Println("People Sleep")
} func main() {
var t Test
//接口是个地址
fmt.Println(t) var stu Student = Student{
name: "stu1",
age: ,
score: ,
}
t = stu
t.Print()
t.Sleep()
fmt.Println("t:", t) }
//接口,空接口
package main
import "fmt"
type Carer interface {
GetName() string
Run()
}
func main() {
var a interface{} //空接口
var b int //具体类型
//空接口可以保持任何类型的变量
a = b // b给a赋值,空接口可以容纳任何类型 b=a //这是错的
fmt.Printf("type of a:%T\n", a) // %T打印类型
}
//接口的实现(车,宝马车)
package main
import "fmt"
type Carer interface {
GetName() string
Run()
DiDi()
}
type BMW struct {
Name string
}
//得实现接口所有的方法,才算实现了该接口
func (p *BMW) GetName() string {
return p.Name
}
//因此还得实现RUN()
//指针类型*BMW,也可以写值类型 (p BMW)
func (p *BMW) Run() {
fmt.Printf("%s is running\n", p.Name)
}
//还得实现DiDi()
func (p *BMW) DiDi() {
fmt.Printf("%s is didi\n", p.Name)
}
func main() {
var car Carer
fmt.Println(car)
//var bmw BMW
//bmw.Name = "BMW"
//写法2
bmw := &BMW{
Name: "BMW",
}
car = bmw
car.Run()
}
宝马
//Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口。
//因此Golang中没有implement类似的关键字
//如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口
package main
import "fmt"
type Carer interface {
GetName() string
Run()
DiDi()
}
type Test interface {
Hello()
}
//宝马车
type BMW struct {
Name string
}
//因此还得实现RUN()
//得实现接口所有的方法,才算实现了该接口
func (p *BMW) GetName() string {
return p.Name
}
//实现接口的Run()
func (p *BMW) Run() {
fmt.Printf("%s is running\n", p.Name)
}
//还得实现DiDi()
func (p *BMW) DiDi() {
fmt.Printf("%s is didi\n", p.Name)
}
func (p *BMW) Hello() {
fmt.Printf("hello,i'm %s \n", p.Name)
}
//比亚迪
type BYD struct {
Name string
}
func (p *BYD) GetName() string {
return p.Name
}
func (p *BYD) Run() {
fmt.Printf("%s is running\n", p.Name)
}
func (p *BYD) DiDi() {
fmt.Printf("%s is didi\n", p.Name)
}
func main() {
var car Carer
var test Test
fmt.Println(car)
//var bmw BMW
//bmw.Name = "BMW"
//写法2
bmw := &BMW{
Name: "BMW",
}
car = bmw
car.Run()
test = bmw
test.Hello()
byd := &BYD{
Name: "BYD",
}
car = byd
car.Run()
}
比亚迪和宝马
Golang之接口(interface)的更多相关文章
- golang中接口interface和struct结构类的分析
再golang中,我们要充分理解interface和struct这两种数据类型.为此,我们需要优先理解type的作用. type是golang语言中定义数据类型的唯一关键字.对于type中的匿名成员和 ...
- [golang note] 接口使用
侵入式接口 √ 在其他一些编程语言中,接口主要是作为不同组件之间的契约存在,即规定双方交互的规约. √ 对契约的实现是强制的,即必须确保用户的确实现了该接口,而实现一个接口,需要从该接口继承. √ 如 ...
- golang面向对象和interface接口
一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...
- Golang | 既是接口又是类型,interface是什么神仙用法?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第12篇文章,我们来继续聊聊interface的使用. 在上一篇文章当中我们介绍了面向对象的一些基本概念,以及gol ...
- Golang 接口interface
接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这成为Structural Typing 接口只有方法声明,没 ...
- 【Golang】Go 通过结构(struct) 实现接口(interface)
一.通过结构(struct) 实现 接口(interface) 1.在了解iris框架的时候,经常看到有这样去写的使用一个空结构体作为接收器,来调用方法,有点好奇这样做有什么意义. 解释:在 Go 语 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- Go 接口(interface)
文章转载地址:https://www.flysnow.org/2017/04/03/go-in-action-go-interface.html 1.什么是 interface? 简单的说,i ...
- 【荐】详解 golang 中的 interface 和 nil
golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
随机推荐
- [BZOJ5330][SDOI2018]反回文串
luogu bzoj sol 枚举一个长度为\(n\)为回文串,它的所有循环位移都可以产生贡献. 但是这样算重了.重复的地方在于可能多个回文串循环同构,或者可能有的回文串经过小于\(n\)次循环位移后 ...
- CH1807 Necklace
题意 背景 有一天,袁☆同学绵了一条价值连城宝石项链,但是,一个严重的问题是,他竟然忘记了项链的主人是谁!在得知此事后,很多人向☆同学发来了很多邮件,都说项链是自己的,要求他归还(显然其中最多只有一个 ...
- DevExpress GridControl 单元格添加进度条(ProgressBar)
首先可以使用DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所以的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...
- vmware player 在windows下nat模式中的端口映射
1.设置虚拟机nat共享的网卡为固定ip vmware虚拟机使用nat网络时,是VMware Network Adapter VMnet8网卡提供的nat服务.查看VMware Network Ada ...
- WCF揭秘学习笔记(1):基础知识
最近找工作,面试时经常被问懂不懂WCF.不少招聘高级.NET工程师的要求上都 写着有WCF开发经验的优先考虑.我对于WCF仅仅是通过看一些教学视频这种山寨学习法了解一些.现在要下决心好好学习一下WCF ...
- SQL中減少日志文件大小
SQL中減少日志文件大小 编写人:CC阿爸 2014-6-14 在日常SQL数据库的操作中,常常会出现SQL日志文件超大,大小都超过正常MDF数据库文件,作为一般用户来讲,LDF太大,只会影响服务 ...
- Build fast jar 打包,增加配置文件
Build fast jar 打包,增加配置文件
- HyperLogLog(不精确的去重计数方案)
pfadd 用法和sadd一样 pfcount 用法和scard一样 127.0.0.1:6379> get lan (nil) 127.0.0.1:6379> pfadd lan js ...
- pyinstaller的使用方法 by 王大龙
---------------------------------------------------------------------------------------------------- ...
- java之mail发送
一.邮箱的应用在实际的Java开发过程中,也是非常常见的.我这里就是写了一个简单的邮箱发送功能. 二.邮箱的基本配置,使用的是JavaMailSender的提供的方式来实现邮件的发送 1)qq邮箱的配 ...