在Go語言中,接口(interface)是一種類型,它規(guī)定了一組方法簽名,但它不會(huì)實(shí)現(xiàn)這些方法。接口類型的變量可以保存任何實(shí)現(xiàn)了這些方法的值。接口的定義以關(guān)鍵字interface
開始,后跟接口名稱和一組方法聲明。方法聲明包括方法名、參數(shù)列表和返回值列表。方法名在接口中必須唯一。
以下是一個(gè)簡單的Go語言接口定義示例:
package main
import "fmt"
// 定義一個(gè)名為Shape的接口,包含兩個(gè)方法:Area和Perimeter
type Shape interface {
Area() float64
Perimeter() float64
}
// 定義一個(gè)名為Circle的結(jié)構(gòu)體,表示一個(gè)圓形
type Circle struct {
Radius float64
}
// 為Circle結(jié)構(gòu)體實(shí)現(xiàn)Shape接口的Area方法
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
// 為Circle結(jié)構(gòu)體實(shí)現(xiàn)Shape接口的Perimeter方法
func (c Circle) Perimeter() float64 {
return 2 * 3.14 * c.Radius
}
// 定義一個(gè)名為Rectangle的結(jié)構(gòu)體,表示一個(gè)矩形
type Rectangle struct {
Width, Height float64
}
// 為Rectangle結(jié)構(gòu)體實(shí)現(xiàn)Shape接口的Area方法
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
// 為Rectangle結(jié)構(gòu)體實(shí)現(xiàn)Shape接口的Perimeter方法
func (r Rectangle) Perimeter() float64 {
return 2 * (r.Width + r.Height)
}
// 定義一個(gè)名為PrintAreaAndPerimeter的函數(shù),接受一個(gè)Shape接口類型的參數(shù)
func PrintAreaAndPerimeter(s Shape) {
fmt.Printf("Area: %v\n", s.Area())
fmt.Printf("Perimeter: %v\n", s.Perimeter())
}
func main() {
c := Circle{Radius: 5}
r := Rectangle{Width: 3, Height: 4}
// 由于Circle和Rectangle都實(shí)現(xiàn)了Shape接口,它們都可以傳遞給PrintAreaAndPerimeter函數(shù)
PrintAreaAndPerimeter(c)
PrintAreaAndPerimeter(r)
}
在這個(gè)示例中,我們定義了一個(gè)名為Shape
的接口,包含兩個(gè)方法:Area()
和Perimeter()
。然后,我們定義了兩個(gè)結(jié)構(gòu)體:Circle
和Rectangle
,并為它們分別實(shí)現(xiàn)了Shape
接口的方法。最后,我們定義了一個(gè)名為PrintAreaAndPerimeter
的函數(shù),該函數(shù)接受一個(gè)Shape
接口類型的參數(shù),并打印出輸入形狀的面積和周長。在main
函數(shù)中,我們創(chuàng)建了一個(gè)圓形和一個(gè)矩形的實(shí)例,并將它們傳遞給PrintAreaAndPerimeter
函數(shù)。