Go - 接口



Go 编程提供了另一种称为 interfaces 的数据类型,它表示一组方法签名。struct 数据类型实现这些接口,以便具有接口的方法签名的方法定义。

语法


/* 定义接口 */
type interface_name interface {
	 	method_name1 [return_type]
	 	method_name2 [return_type]
	 	method_name3 [return_type]
	 	...
	 	method_namen [return_type]
}

/* 定义一个结构体 */
type struct_name struct {
	 	/* variables */
}

/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
	 	/* 方法实现 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
	 	/* 方法实现 */
}


package main

import ("fmt" "math")

/* 定义接口 */
type Shape interface {
	 	area() float64
}

/* 定义一个圆 */
type Circle struct {
	 	x,y,radius float64
}

/* 定义一个矩形 */
type Rectangle struct {
	 	width, height float64
}

/* 定义圆的方法(Shape.area()的实现) */
func(circle Circle) area() float64 {
	 	return math.Pi * circle.radius * circle.radius
}

/* 定义矩形的方法(Shape.area()的实现)*/
func(rect Rectangle) area() float64 {
	 	return rect.width * rect.height
}

/* 定义形状的方法 */
func getArea(shape Shape) float64 {
	 	return shape.area()
}

func main() {
	 	circle := Circle{x:0,y:0,radius:5}
	 	rectangle := Rectangle {width:10, height:5}
	 	
	 	fmt.Printf("Circle area: %f\n",getArea(circle))
	 	fmt.Printf("Rectangle area: %f\n",getArea(rectangle))
}

编译并执行上述代码时,它会产生以下结果——

Circle area: 78.539816
Rectangle area: 50.000000