Dalam bahasa Go, fungsi boleh disimpan sebagai nilai antara muka, dengan itu mencapai polimorfisme: tentukan antara muka dan tentukan satu set tandatangan kaedah. Buat jenis yang melaksanakan antara muka dan melaksanakan kaedah ini untuknya. Tentukan fungsi yang menerima nilai antara muka sebagai input. Kaedah yang hanya menggunakan nilai antara muka dalam fungsi, tanpa mengira jenis sebenar. Fungsi panggilan dengan nilai pelbagai jenis untuk mencapai polimorfisme.
Dalam bahasa Go, fungsi boleh disimpan sebagai nilai antara muka, yang membolehkan kita mencapai polimorfisme walaupun bahasa Go itu sendiri tidak berorientasikan objek.
Antaramuka mentakrifkan tandatangan set kaedah yang mesti dilaksanakan mengikut jenis yang melaksanakan antara muka. Sebagai contoh, kami mentakrifkan antara muka Shape
接口:
type Shape interface { Area() float64 }
我们可以创建实现 Shape
接口的类型,如下所示:
type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height } type Circle struct { radius float64 } func (c Circle) Area() float64 { return math.Pi * c.radius * c.radius }
现在,我们创建了一个 Shape
接口,我们可以使用函数作为其值。为此,我们定义一个 calculateArea
函数,它接受一个 Shape
接口值作为输入。
func calculateArea(s Shape) float64 { return s.Area() }
现在,让我们创建一个实例来演示多态性是如何实现的。
func main() { // 创建一个 Rectangle 和一个 Circle r := Rectangle{width: 2, height: 3} c := Circle{radius: 5} // 使用函数计算他们的面积 areaR := calculateArea(r) areaC := calculateArea(c) fmt.Println("Rectangle area:", areaR) fmt.Println("Circle area:", areaC) }
输出:
Rectangle area: 6 Circle area: 78.53981633974483
在这个例子中,calculateArea
函数只使用传入的 Shape
接口的 Area
方法,无论实际类型是 Rectangle
还是 Circle
rrreee
Shape
, kita boleh menggunakan fungsi sebagai nilainya. Untuk melakukan ini, kami mentakrifkan fungsi calculateArea
yang menerima nilai antara muka Shape
sebagai input. 🎜rrreee🎜Kes Praktikal🎜🎜Sekarang, mari kita cipta satu contoh untuk menunjukkan cara polimorfisme dilaksanakan. 🎜rrreee🎜Output: 🎜rrreee🎜Dalam contoh ini, fungsi calculateArea
hanya menggunakan kaedah Area
antara muka Shape
yang dihantar, tanpa mengira jenis sebenar Adakah ia Rectangle
atau Bulatan
. Ini adalah penjelmaan polimorfisme. 🎜Atas ialah kandungan terperinci Pelaksanaan polimorfisme fungsi golang dalam pengaturcaraan berorientasikan objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!