作者:王意之 | 来源:互联网 | 2023-10-17 15:12
本文由编程笔记#小编为大家整理,主要介绍了go 接口相关的知识,希望对你有一定的参考价值。
一、接口是什么
接口提供了一种方式来 说明 对象的行为:如果谁能搞定这件事,它就可以用在这儿。
接口定义了一组方法(方法集),但是这些方法不包含(实现)代码:它们没有被实现(它们是抽象的)。接口里也不能包含变量。
格式:
type Namer interface {
Method1(param_list) return_type
Method2(param_list) return_type
...
}
接口的特性:
- 类型不需要显式声明它实现了某个接口:接口被隐式地实现。多个类型可以实现同一个接口。
- 实现某个接口的类型(除了实现接口方法外)可以有其他的方法。
- 一个类型可以实现多个接口。
- 接口类型可以包含一个实例的引用, 该实例的类型实现了此接口(接口是动态类型)。
二、例子:
package main
import "fmt"
type stockPosition struct {
ticker string
sharePrice float32
count float32
}
func (s stockPosition) getValue() float32{
return s.sharePrice * s.count
}
type car struct {
make string
model string
price float32
}
func (c car) getValue() float32 {
return c.price
}
type valuable interface {
getValue() float32
}
func showValue(asset valuable){
fmt.Printf("Value of the asset is %f
", asset.getValue())
}
func main () {
var o valuable = stockPosition{"GOOG", 577.20, 4}
showValue(o)
o = car{"BWM","M3", 66500}
showValue(o)
}
输出:
Value of the asset is 2308.800049
Value of the asset is 66500.000000
接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。