ここでいうインターフェイスとは、その種類のスロットを意味するものではありませんインターフェースのことなら、集まってそれで終わりです。
さまざまな言語で、インターフェイスについて言及する場合、通常は仕様を参照し、特定のオブジェクトがこの仕様の詳細を実装します。
この記事で使用されているインターフェイスは主に制約インターフェイスであり、ストレージ インターフェイスもあります。
注:
Go では、インターフェイスは type 、つまり抽象型です。これには メソッドのみがあり、 属性 はありません。
構造について話すとき、Go 言語 (Spring) の基本の構造、Go 言語の基本の構造(夏) 、 Go 言語の基礎の構造 (秋の章) では、継承の概念について言及し、Go は構造を通じて継承を完了します。 car 構造には 4 つの属性と、車 (carInfo) 情報を表示するメソッドがあります。 <br/> <br/> 通过回顾,我们可以发现,车,应该作为一个基本的概念。<br/> 上述 车就是一个抽象的概念,电瓶车是车,小轿车也是车,大卡车也是车。 这些车至少有一个统一的功能,那就是跑,但是像几个轮胎了,什么品牌了。 应该是属于自己的,不再是属于 <br/> 假设车,至少有这三个动作,不管任何结构体,只要实现了 <br/> 这里是有区别的,电瓶车没有属性 第2行代码和第8行代码,变量类型是 Go是强类型语言,为什么类型不一致,还可以赋值,那执行结果会出问题吗??? 但是我们发现执行结果是没问题的。<br/> しかし、変数の型が一致していないにもかかわらず、代入は可能であり、毎回エラーが報告されるのはなぜでしょうか? 上記のコードは、BMW car と バッテリー車# を決定できます。 ##Car インターフェイスのすべてのメソッドを完全に実装します。 Car# が彼らの父親であることがわかります。もちろん、彼らの父親を使用することもできます。息子を迎えるためです。はい。 1 つの構造で複数のインターフェイスを実装<br/> 这个结构体同时实现了两个结构,一个是 <br/> <br/> 接口嵌套这个有点像组合,比如有跑,跳,吃等这些操作。 例如一个动物,因该是要有这些操作的,那这个动物应该也是一个接口。 并且把这些动作都拿过来才对。 <br/> Go の基本的なインターフェイス、主に インターフェイスと継承の違いについて、上記で学習しました、1 つの 構造は複数のインターフェイスを実装します、インターフェイスのネスト 。 理解するのは簡単ではないかもしれませんが、試して根気強く続けなければなりません。 インターフェイスが必要な理由
#継承の見直し
車の構造
//车
type Car struct {
Brand string //车品牌
CarNum string //车牌号
Tyre int //轮胎个数
}
//给车绑定一个方法,说明车的基本信息
func (this *Car) carInfo() {
fmt.Printf("品牌:%s,车牌号:%s,轮胎个数:%d\n", this.Brand, this.CarNum, this.Tyre)
}
##
# BYD车//宝马车
type BMWCar struct {
//*Car和Car基本没有区别,一个存的是整个结构体,一个存的是结构体地址,用法大同小异
*Car //这就表示继承了Car这个结构体
}
メインコード//比亚迪车
type BYDCar struct {
*Car
}
実行結果func main() {
//一个宝马对象
var bmw1 = BMWCar{&Car{
Brand: "宝马x8",
CarNum: "京666",
Tyre: 4,
}
}
//一个比亚迪对象
var byd1 = BYDCar{&Car{
Brand: "比亚迪L3",
CarNum: "京111",
Tyre: 4,
}
}
//因为 BMWCar 和 BYDCar 都继承了Car,所以都有carInfo这个方法
bmw1.carInfo()
byd1.carInfo()
}
<br/>
Car
结构体似乎显示了车的属性,其实是不太对的。Car
这个抽象的概念中了,所以,这时候用接口会更好。定义接口
车接口
type Car interface {
//车会跑
Run(speed int)
//车需要加油
Refuel(oil int)
//车需要转弯
Wheel(direction string)
}
Car
里面的所有方法,就代表它一定是一个车。<br/>宝马车
//宝马车
type BMWCar struct {
Owner string //车主
Brand string //车品牌
CarNum string //车牌号
}
//构造方法
func NewBMWCar(owner string, brand string, carNum string) *BMWCar {
return &BMWCar{Owner: owner, Brand: brand, CarNum: carNum}
}
func (this *BMWCar) Run(speed int) {
fmt.Printf("我是 %s,我的车是 %s,我车牌号为 %s,我正在以 %d 速度行驶\n", this.Owner, this.Brand, this.CarNum, speed)
}
func (this *BMWCar) Refuel(oil int) {
fmt.Printf("老板,加%d升油\n", oil)
}
func (this *BMWCar) Wheel(direction string) {
fmt.Printf("我正在%s转弯\n", direction)
}
电瓶车<br/>
<br/>
//电瓶车
type Electromobile struct {
Owner string //车主
Brand string //车品牌
}
func NewElectromobile(owner string, brand string) *Electromobile {
return &Electromobile{Owner: owner, Brand: brand}
}
func (this *Electromobile) Run(speed int) {
fmt.Printf("我是 %s,我的车是 %s,我正在以 %d 速度行驶\n", this.Owner, this.Brand,, speed)
}
func (this *Electromobile) Refuel(oil int) {
fmt.Printf("你妹的,你电动车加啥油...\n")
}
func (this *Electromobile) Wheel(direction string) {
fmt.Printf("我正在%s转弯\n", direction)
}
CarNum
,但是仍然实现了Car
接口的所有方法,所以电瓶车在代码上,仍然是车。main
func main() {
var 张三的车 Car
张三的车 = NewBMWCar("张三", "宝马6", "京666")
张三的车.Run(80)
张三的车.Refuel(20)
张三的车.Wheel("左")
var 李四的车 Car
李四的车 = NewElectromobile("李四", "小刀电动车")
李四的车.Run(40)
李四的车.Refuel(0)
李四的车.Wheel("左")
}
Car
接口类型,但是在赋值时,确是其他类型。<br/>执行结果
したがって、
接口代码
//跑接口
type Runer interface {
Run()
}
// 跳接口
type Jumper interface {
Jump()
}
结构体代码
//袋鼠结构体
type Roo struct {
Name string
}
func (this *Roo) Jump() {
fmt.Println("我是袋鼠,我会跳")
}
func (this *Roo) Run() {
fmt.Println("我是袋鼠,我会跑")
}
Runer
,一个是Jumper
。main代码
func main() {
var runner Runer
var jumper Jumper
runner = &Roo{Name: "袋鼠"}
jumper = &Roo{Name: "袋鼠"}
runner.Run()
jumper.Jump()
}
Roo
既然实现了两个接口,自然两个接口都可以接收Roo
这个结构体。执行结果
接口嵌套<br/>
接口示例代码
//跑接口
type Runer interface {
Run()
}
// 跳接口
type Jumper interface {
Jump()
}
//动物接口,继承了 跑 和 跳
type Animal interface {
Runer
Jumper
}
结构体代码
//袋鼠结构体,实现了跑和跳
type Roo struct {
Name string
}
func (this *Roo) Jump() {
fmt.Println("我是袋鼠,我会跳")
}
func (this *Roo) Run() {
fmt.Println("我是袋鼠,我会跑")
}
main代码
func main() {
var animal Animal
animal = &Roo{Name: "袋鼠"}
animal = &Roo{Name: "袋鼠"}
animal.Run()
animal.Jump()
}
执行结果
概要
以上がGo言語の基本的なインターフェースを理解するための記事(前編)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。