当前位置: 首页 > news >正文

Go语言入门心法(三): 接口


Go语言入门心法(一)

Go语言入门心法(二): 结构体

Go语言入门心法(三): 接口




一:go语言接口认知


Go语言中接口认知升维:解决人生问题的自我引导法则: 复盘思维|结构化思维|金字塔思维|体系化思维|系统化思维
面向对象编程(oop)三大特性: 封装,继承,多态
Go语言中,可以认为接口是一种自定义的抽象数据类型,既然是数据类型,那么久可以使用接口声明变量等操作;
它不会暴露出它所代表的内部属性的结构,它只会展示出它自己的方法,因此不能将接口类型实例化;
根据go语言规范,单个函数的接口命名为函数名加上"er"作为后缀;例如:Writer,Reader,Formatter等。
接口命令规范如下:(1)当个函数名的接口名以"er"作为后缀,接口的实现则去掉“er”字符串(2)go语言的接口是方法的集合,使用接口是实现模块化的重要方式;接口是用来定义行为类型的,这些被定义的行为不由接口直接实现(3)与其他语言不同的是,Go语言的接口没有数据字段(接口成员变量),只有定义的抽象的方法,不需要实现方法,不需要方法体定义接口与订阅结构体类似,定义需要使用type关键字和interface关键字type InterfaceName interface {Method()}

1.1 接口实例一: 

 

package main// Animal 定义接口
type Animal interface {Named() string // 接口的方法,返回值类型为stringSpeak() string
}type Cat struct {
}
type Dog struct {sleepTime string
}// Named Cat实现接口Animal的Named()抽象方法
func (cat *Cat) Named() string {return "Cat:named()-cat"
}// Speak Cat实现接口Animal的Speak()抽象方法
func (cat *Cat) Speak() string {return "Cat:speak()-cat"
}// Named Dog实现了Animal接口的Named()抽象方法
func (dog *Dog) Named() string {return "Dog:named()-dog"
}// Speak Dog实现了Animal接口的Speak()抽象方法
func (dog *Dog) Speak() string {return "Dog:speak()-dog"
}// Sleeper 定义Dog结构体的方法
func (dog *Dog) Sleeper(sleepTime string) {dog.sleepTime = sleepTime
}func main() {println(`Go语言中接口认知升维:解决人生问题的自我引导法则: 复盘思维|结构化思维|金字塔思维|体系化思维|系统化思维面向对象编程(oop)三大特性: 封装,继承,多态Go语言中,可以认为接口是一种自定义的抽象数据类型,既然是数据类型,那么久可以使用接口声明变量等操作;它不会暴露出它所代表的内部属性的结构,它只会展示出它自己的方法,因此不能将接口类型实例化;根据go语言规范,单个函数的接口命名为函数名加上"er"作为后缀;例如:Writer,Reader,Formatter等。接口命令规范如下:(1)当个函数名的接口名以"er"作为后缀,接口的实现则去掉“er”字符串(2)go语言的接口是方法的集合,使用接口是实现模块化的重要方式;接口是用来定义行为类型的,这些被定义的行为不由接口直接实现(3)与其他语言不同的是,Go语言的接口没有数据字段(接口成员变量),只有定义的抽象的方法,不需要实现方法,不需要方法体定义接口与订阅结构体类似,定义需要使用type关键字和interface关键字type InterfaceName interface {Method()}`)println()println("=================================定义接口==========================")// 非指针实例化对象println("Cat类型就是Animal的一个实例")var cat = Cat{}println("Dog类型就是Animal的一个实例")var dog = Dog{}println("我的小猫咪: ", cat.Named())println("我的小猫咪: ", cat.Speak())println("我的小旺财: ", dog.Named())println("我的小旺财: ", dog.Speak())dog.Sleeper("10:50")println("我的小旺财休息时间: ", dog.sleepTime)}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPToInterfaceAnimalGrammar_go.exe D:\program_file\go_workspace\org.jd.data\interface\OOPToInterfaceAnimalGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPToInterfaceAnimalGrammar_go.exe

        Go语言中接口认知升维:
            解决人生问题的自我引导法则: 复盘思维|结构化思维|金字塔思维|体系化思
维|系统化思维
        面向对象编程(oop)三大特性: 封装,继承,多态
        Go语言中,可以认为接口是一种自定义的抽象数据类型,既然是数据类型,那么久可
以使用接口声明变量等操作;
        它不会暴露出它所代表的内部属性的结构,它只会展示出它自己的方法,因此不能将接口类型实例化;
        根据go语言规范,单个函数的接口命名为函数名加上"er"作为后缀;例如:Writer,Reader,Formatter等。
        接口命令规范如下:
         (1)当个函数名的接口名以"er"作为后缀,接口的实现则去掉“er”字符串
         (2)go语言的接口是方法的集合,使用接口是实现模块化的重要方式;接口是用来定义行为类型的,这些被定义的行为不由接口直接实现
         (3)与其他语言不同的是,Go语言的接口没有数据字段(接口成员变量),只有定义的抽象的方法,不需要实现方法,不需要方法体
         定义接口与订阅结构体类似,定义需要使用type关键字和interface关键字
         type InterfaceName interface {
                Method()
         }


=================================定义接口==========================
Cat类型就是Animal的一个实例
Dog类型就是Animal的一个实例
我的小猫咪:  Cat:named()-cat
我的小猫咪:  Cat:speak()-cat
我的小旺财:  Dog:named()-dog
我的小旺财:  Dog:speak()-dog
我的小旺财休息时间:  10:50

Process finished with the exit code 0
 


 1.2 接口实例二:

package mainimport ("errors""fmt"
)// IDatabase 定义一个数据库操作的接口
type IDatabase interface {Connect() errorDisconnect() error
}// Mysql 实例类型MySQL数据操作
type Mysql struct {DBName    stringisConnect bool
}// Redis Redis实例类型
type Redis struct {DBName string
}// Connect 实现IDatabase接口的Connect方法
func (mysql *Mysql) Connect() error {fmt.Println("Mysql Connect DB => " + mysql.DBName)// do Connectmysql.isConnect = trueif mysql.isConnect {fmt.Println("Mysql Connect Success !")return nil} else {return errors.New("Connect failure ")}
}// Disconnect 实现IDatabase接口的Disconnect方法
func (mysql *Mysql) Disconnect() error {// do Disconnectfmt.Println("Mysql Disconnect Success !")return nil
}// Connect 实现IDatabase接口的Connect方法
func (redis *Redis) Connect() error {fmt.Println("Redis Connect DB => " + redis.DBName)fmt.Println("Redis Connect Success !")return nil
}// Disconnect 实现IDatabase接口的Disconnect方法
func (redis *Redis) Disconnect() error {// do Disconnectfmt.Println("Redis Disconnect Success !")return nil
}
func main() {var mysql = Mysql{DBName: "student"}println("开始连接")mysql.Connect()// do somethingfmt.Println("断开连接")mysql.Disconnect()var redis = &Redis{DBName: "student"}println("开始连接")redis.Connect()// do somethingfmt.Println("断开连接")redis.Disconnect()
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPToInterfaceIDatabaseGrammar_go.exe D:\program_file\go_workspace\org.jd.data\interface\OOPToInterfaceIDatabaseGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPToInterfaceIDatabaseGrammar_go.exe
开始连接
Mysql Connect DB => student
Mysql Connect Success !
断开连接
Mysql Disconnect Success !
开始连接
Redis Connect DB => student
Redis Connect Success !
断开连接
Redis Disconnect Success !

Process finished with the exit code 0
 

 

 忙着去耍帅,后期补充完整。。。。。

http://www.lryc.cn/news/193239.html

相关文章:

  • leetcode:210. 课程表 II
  • [MT8766][Android12] 使用谷歌LPA实现ESIM功能的流程
  • MyBatis-Plus为简化开发而生
  • 【翻译】Efficient Data Loader for Fast Sampling-Based GNN Training on Large Graphs
  • OPUS解码器PLC
  • Rancher 使用指南
  • 百度SEO优化全攻略(提高网站排名的5个方面)
  • 华为云云耀云服务器L实例评测|华为云耀云服务器L实例私有库搭建verdaccio(八)
  • C语言之动态内存管理_柔性数组篇(2)
  • vue基础
  • 访问量突破1W,纪念一下~
  • C# 处理TCP数据的类(服务端)
  • 【Jenkins】调用API构建并钉钉通知
  • Java NIO三大核心组件
  • js数据排序方法(sort)?
  • 若依框架学习笔记_mybatis
  • 虚拟机的发展史:从分时系统到容器化
  • 季涨约3~8%,DRAM合约价大幅回升 | 百能云芯
  • LocalDate的用法
  • React通过ref获取子组件的数据和方法
  • Enhancing Self-Consistency and Performance of Pre-Trained Language Model
  • 安防监控视频汇聚平台EasyCVR视频广场搜索异常,报错“通道未开启”的问题排查与解决
  • css 星星闪烁加载框
  • 代码随想录算法训练营第二十二天丨 二叉树part09
  • Apipost连接数据库详解
  • 让 Visual Studio 用上 ChatGPT
  • 如何删除错误堆栈里的数据
  • k8s使用minio分布式集群作为存储--基础配置篇
  • @Autowired 到底是怎么把变量注入进来的?
  • 【Python学习笔记】函数