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 ...
随机推荐
- Linux运维学习笔记-常用快捷键及vi、vim总结
vim是vi的增强版,vim完全兼容vi
- ElasticSearch(一):windows下安装ElasticSearch6.3.2
前言 最近开始学习ElasticSearch,从官网上下载的最新版的es,但是网上安装教程大部分是早期5.X版本的,因为6.x版本出现了不同,所以记录下. 正文 1. 下载ElasticSearch ...
- Diffie-Hellman 算法
Diffie-Hellman 算法描述: 目前被许多商业产品交易采用. HD 算法为公开的密钥算法,发明于1976年.该算法不能用于加密或解密,而是用于密钥的传输和分配. DH 算法的安全性 ...
- 《DSP using MATLAB》Problem 2.8
1.代码: 从MATLAB官方网上下载的. %*************************************************************************% %A ...
- USB学习笔记-总结
1. # ls /sys/bus/usb/devices/解析:1-0:1.0 1-1 1-1:1.0 2-0:1.0 2-1 2-1:1.0 2-2 2-2.1 2-2:1.0 2-2.1:1.0 ...
- linux下tengine安装
1.什么是tengine? 说到tengine,首先还是得说下nginx了,大家对于nginx并不陌生,对于基本的需求都能满足,如果是涉及高级性能,那么就必须使用商用版nginx plus了,一谈到商 ...
- git hooks 的学习使用
示例网址: https://my.oschina.net/u/3477605/blog/1806238 https://www.jianshu.com/p/935409ce4c9a https://w ...
- .NET 4.5 HttpClient 中使用Cookie
为了使用.NET 4.5的HttpClient从WIN2K3换成了WIN7.装VS2010,结果告诉我VS2010不支持.NET 4.5.又装VS2012,接着装.NET FRAMEWORK 4.5. ...
- LAMP的安装和注意事项
LAMP--Linux+Apache(httpd)+MySQL+PHP,是常用的web服务器架构,下面接受编译安装的过程,以及出现的错误. 注意事项: 1. 扩展epel源:参照:http://www ...
- java HttpClient 获取页面Cookie信息
HttpClient client = new HttpClient(); GetMethod get=new GetMethod("http://www.baidu.com"); ...