Go语言入门心法(三):接口
- 软件开发
- 2025-08-17 01:24:02

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 // 接口的方法,返回值类型为string Speak() 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 main import ( "errors" "fmt" ) // IDatabase 定义一个数据库操作的接口 type IDatabase interface { Connect() error Disconnect() error } // Mysql 实例类型MySQL数据操作 type Mysql struct { DBName string isConnect bool } // Redis Redis实例类型 type Redis struct { DBName string } // Connect 实现IDatabase接口的Connect方法 func (mysql *Mysql) Connect() error { fmt.Println("Mysql Connect DB => " + mysql.DBName) // do Connect mysql.isConnect = true if mysql.isConnect { fmt.Println("Mysql Connect Success !") return nil } else { return errors.New("Connect failure ") } } // Disconnect 实现IDatabase接口的Disconnect方法 func (mysql *Mysql) Disconnect() error { // do Disconnect fmt.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 Disconnect fmt.Println("Redis Disconnect Success !") return nil } func main() { var mysql = Mysql{DBName: "student"} println("开始连接") mysql.Connect() // do something fmt.Println("断开连接") mysql.Disconnect() var redis = &Redis{DBName: "student"} println("开始连接") redis.Connect() // do something fmt.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
忙着去耍帅,后期补充完整。。。。。
Go语言入门心法(三):接口由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Go语言入门心法(三):接口”