go 接口实战

在 Golang 中,接口是一组方法签名。当类型为接口中的所有方法提供定义时,它被称为实现接口。它与 OOP(面向对象编程) 非常相似。接口指定了类型应该具有的方法,类型决定了如何实现这些方法。

如果某个对象实现了某个接口的所有方法,则此对象就实现了该接口。

  1. 定义接口
    关键字 interface 用来定义接口,语法如下:
type interface_name interface {
   method_name1([args ...arg_type]) [return_type]
   method_name2([args ...arg_type]) [return_type]
   method_name3([args ...arg_type]) [return_type]
   ...
   method_namen([args ...arg_type]) [return_type]
}

一个接口中可以定义多个方法,根据逻辑需要,自定义参数和返回值。

  1. 实现接口
    一个结构体实现了某个接口的所有方法,则此结构体就实现了该接口。
    我们定义一个Shape接口,实现Area函数
package testinterface

// type Person interface {
// 	Hello()
// 	Changeage(age int16)
// }

type Shape interface {
	Area() float64
}

声明结构体用来实现接口

  • 圆形
package testinterface

type Circle struct {
	Radius float64
}

func (c Circle) Area() float64 {
	return 3.14 * c.Radius * c.Radius
}

  • 长方形
package testinterface

type Rectangle struct {
	Width  float64
	Height float64
}

func (r Rectangle) Area() float64 {
	return r.Width * r.Height
}

  • 初始化结构体
package main

import (
	"ellis/testinterface"
	"fmt"
)

type Name struct {
	FirstName string
	LastName  string
}

func main() {
	var s testinterface.Shape
	s = testinterface.Rectangle{Width: 10, Height: 10}
	//var s testinterface.Rectangle = testinterface.Rectangle{Width: 10, Height: 10} 也可以
	fmt.Printf("矩形面积: %f\n", s.Area())

}

  1. 接口嵌套
// 定义3个接口
type A interface {
    test1()
}

type B interface {
    test2()
}

// 定义嵌套接口
type C interface {
    A
    B
    test3()
}

定义结构体实现所有方法

type Person struct {
    //如果想实现接口C,那不止要实现接口C的方法,还要实现接口A,B中的方法
}

func (p Person) test1() {
    fmt.Println("test1 方法................")
}

func (p Person) test2() {
    fmt.Println("test2 方法................")
}

func (p Person) test3() {
    fmt.Println("test3 方法................")
}


var person Person = Person{}
// 实现 C 接口的所有方法
person.test1()
person.test2()
person.test3()

注意
在自定义包中结构体的属性首字母大写,接口函数名首字母大写
https://www.runoob.com/go/go-interfaces.html

https://learnku.com/articles/44168

你可能感兴趣的:(GO,golang,开发语言)