概念簡介
接口(Interfaces)是命名了的方法簽名(signatures)的集合。
例程代碼
package main
import "fmt"
import "math"
// 這裏是一個幾何體的基本接口。
type geometry interface {
area() float64
perim() float64
}
// 在我們的例子中,我們將在類型 `rect` 和 `circle` 上實現
// 這個接口
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
// 要在 Go 中實現一個接口,我們就需要實現接口中的所有
// 方法。這裏我們在 `rect` 上實現了 `geometry` 接口。
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
// `circle` 的實現。
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
// 如果一個變量具有接口類型,那麽我們可以調用指定接口中的
// 方法。這裏有一個通用的 `measure` 函數,利用它來在任
// 何的 `geometry` 上工作。
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perim())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
// 結構體類型 `circle` 和 `rect` 都實現了 `geometry`
// 接口,所以我們可以使用它們的實例作為 `measure` 的參數。
measure(r)
measure(c)
}
執行&輸出
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793
要學習更多關於 Go 的接口的知識,看看這篇
很棒的博文。
課程導航
學習上一篇:Go語言教程:方法 學習下一篇:Go語言教程:錯誤處理
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/interfaces