Go语言接口简介
什么是接口?
作为一个 Go 新手和代码新手,我以前从未接触过 C++ 或任何强类型语言,因此很难找到一些关于 Go 中接口的适合初学者的资源。
所以我决定写一篇,尽我所能帮助初学者。
什么是接口?
Go 语言中的接口提供了一种指定对象行为的方法:如果某个对象可以执行此操作,那么它就可以在此处使用。——《Effective Go》
简单来说,接口是一种包含多种方法的类型。
好了,我们今天就不多说了,直接把事情说清楚。
编写一些代码
目标:实现两种方法sum(),substr()然后打印出两个数的和与减法。
1)我们先从准备工作开始。
package main
import "fmt"
func main() {
}
2)然后是类型,这里我们有item1和,分别item2是两个数字类型float64:
package main
import "fmt"
type item1 struct {
num1, num2 float64
}
type item2 struct {
num1, num2 float64
}
func main() {
}
3)现在我们需要一些指令(方法)才能让代码正常运行:
package main
import "fmt"
type item1 struct {
num1, num2 float64
}
type item2 struct {
num1, num2 float64
}
// Method
func (a item1) sum() float64 {
return a.num1 + a.num2
}
// Method
func (a item1) substr() float64 {
return a.num1 - a.num2
}
// Method
func (b item2) sum() float64 {
return b.num1 + b.num2
}
// Method
func (b item2) substr() float64 {
return b.num1 - b.num2
}
func main() {
}
在继续之前,让我们先更好地了解一下这个方法。
// Method
func (b item2) substr() float64 {
return b.num1 - b.num2
}
b是对 的引用,这是我们在 内部访问和 的item2方式。然后我们有名称、返回类型和返回方法。num1num2item2substr()float64
4)实现result1并result2打印结果:
package main
import "fmt"
type item1 struct {
num1, num2 float64
}
type item2 struct {
num1, num2 float64
}
// Method
func (a item1) sum() float64 {
return a.num1 + a.num2
}
// Method
func (a item1) substr() float64 {
return a.num1 - a.num2
}
// Method
func (b item2) sum() float64 {
return b.num1 + b.num2
}
// Method
func (b item2) substr() float64 {
return b.num1 - b.num2
}
// Result 1 & Result 2
func result1(i item1) {
fmt.Println("Sum: ", i.sum())
fmt.Println("Substr: ", i.substr())
}
func result2(i item2) {
fmt.Println("Sum: ", i.sum())
fmt.Println("Substr: ", i.substr())
}
func main() {
a := item1{num1: 10, num2: 5}
b := item2{num1: 20, num2: 10}
result1(a)
result2(b)
}
// Sum: 15
// Substr: 5
// Sum: 30
// Substr: 10
这里我们向两个函数传递了两个变量:a和,并得到了结果。bresult1result2
但问题在于:
为什么我们需要编写两个功能基本相同的函数(
result1和)?result2
所以,这就是你们一直期待的:接口
5) 实现接口。我之前提到过,接口是一种包含方法(函数)集合的类型。它同时包含 `new`sum()和substr()`new` 方法,它们分别是以下方法的名称:
package main
import "fmt"
type math interface {
sum() float64
substr() float64
}
type item1 struct {
num1, num2 float64
}
type item2 struct {
num1, num2 float64
}
// Method
func (a item1) sum() float64 {
return a.num1 + a.num2
}
// Method
func (a item1) substr() float64 {
return a.num1 - a.num2
}
// Method
func (b item2) sum() float64 {
return b.num1 + b.num2
}
// Method
func (b item2) substr() float64 {
return b.num1 - b.num2
}
func main() {
}
6)打印结果:
package main
import "fmt"
type math interface {
sum() float64
substr() float64
}
type item1 struct {
num1, num2 float64
}
type item2 struct {
num1, num2 float64
}
// Method
func (a item1) sum() float64 {
return a.num1 + a.num2
}
// Method
func (a item1) substr() float64 {
return a.num1 - a.num2
}
// Method
func (b item2) sum() float64 {
return b.num1 + b.num2
}
// Method
func (b item2) substr() float64 {
return b.num1 - b.num2
}
func result(m math) {
fmt.Println("Sum: ", m.sum())
fmt.Println("Substr: ", m.substr())
}
func main() {
a := item1{num1: 10, num2: 5}
b := item2{num1: 20, num2: 10}
result(a)
result(b)
}
// Sum: 15
// Substr: 5
// Sum: 30
// Substr: 10
所以现在我们只需要包含接口math,result然后就可以通过在部分中调用一次来访问它们了sum()。这里 我们对两个变量都调用了一次,得到了相同的结果!substr()main()result
继续 ->空白界面
文章来源:https://dev.to/shearytan/brief-introduction-to-interfaces-in-go-34dg感谢阅读我发表的第一篇文章!