接口:interface
表示一个约定,契约,都是功能的描述(方法的声明)
语法:一个或多个方法的声明的集合。不能有实现,不能有字段。
实现类:可以是任意类型
只需要将接口中方法都实现,那么就是实现该接口。
type A interface{
fun() 返回值
}
type AImpl struct{
字段
}
func (a Ampl) fun()返回值{
}
package main import ( "math" "fmt" ) type Shape interface { area() float64 //接口只声明方法名称没有方法实现 peri() float64 } type Circle struct { //实现了接口中的两个方法,就是该方法的实现类 radius float64//半径 } func (c Circle) area() float64 { //实现接口中的方法 return c.radius * c.radius * 3.14 } func (c Circle) peri()float64 { //实现接口中的方法 return 2 * 3.14 * c.radius } type Triangle struct { a float64 b float64 c float64 } func (t Triangle) area()float64 { //实现接口中的方法 p := t.peri() / 2 area := math.Sqrt(p*(p-t.a)*(p-t.b)*(p-t.c)) return area } func (t Triangle) peri() float64 {//实现接口中的方法 return t.a + t.b + t.c } func testShape(s Shape) { //声明一个函数用接口作为参数,这样该接口的实现类就可以作为参数传入 fmt.Println("面积是:",s.area(),",周长是:",s.peri()) } /* 定义一个接口:形状 定义两个方法: 周长() 面积() 定义三个结构体分别实现该接口: 三角形:周长(),面积() 海伦公式: 矩形:周长(),面积() 圆形:周长(),面积() 在主函数中:分别创建三种形状的对象,并调用对应的周长和面积的方法 增加一个测试的的函数: testArea(接口形状)-->三角形,原型,矩形 testPeri()-->三角形,圆形,矩形 */ func main() { t1 := Triangle{3,4,5} testShape(t1) testShape(Triangle{5,6,8}) testShape(Circle{5}) }