Rumah > pembangunan bahagian belakang > Golang > Antara muka dan polimorfisme dalam bahasa Go

Antara muka dan polimorfisme dalam bahasa Go

王林
Lepaskan: 2023-06-01 21:40:34
asal
753 orang telah melayarinya

Dengan perkembangan pesat teknologi Internet, bahasa pengaturcaraan sentiasa dikemas kini dan dinaik taraf. Antaranya, bahasa Go (Golang) merupakan bahasa pengaturcaraan yang muncul sejak beberapa tahun kebelakangan ini Disebabkan kecekapan dan kemudahan pembelajarannya, ia telah digunakan secara meluas dalam bidang teknologi maklumat Internet. Artikel ini akan menumpukan pada antara muka dan polimorfisme dalam bahasa Go, dengan harapan dapat membantu semua orang memahami dan menggunakan bahasa Go dengan lebih baik.

Antara muka ialah ciri penting dalam bahasa Go. Dalam bahasa Go, antara muka mentakrifkan semua kaedah yang disokong oleh objek. Ini bermakna jika objek melaksanakan semua kaedah yang ditakrifkan dalam antara muka, ia boleh dianggap sebagai objek jenis antara muka tersebut. Antara muka adalah seperti mentakrifkan satu set spesifikasi yang mesti dipatuhi oleh objek supaya kita boleh mengendalikan objek tanpa mengira jenis khususnya.

Dalam bahasa Go, takrifan antara muka menggunakan kata kunci antara muka, dan bentuk asasnya ialah:

type 接口名 interface {
    方法1(参数列表) 返回值列表
    方法2(参数列表) 返回值列表
    ...
}
Salin selepas log masuk

Sebagai contoh, kami mentakrifkan antara muka bernama "Bentuk" dan ia mempunyai kaedah bernama " Kawasan ", mengembalikan nilai kawasan jenis float64. Kemudian takrifan antara muka boleh dinyatakan sebagai:

type Shape interface {
    Area() float64
}
Salin selepas log masuk

Selepas mentakrifkan antara muka, kita perlu membiarkan jenis melaksanakan antara muka ini. Dalam bahasa Go, menggunakan jenis untuk melaksanakan antara muka memerlukan memenuhi tandatangan semua kaedah dalam antara muka. Sebagai contoh, kami mentakrifkan jenis segi empat tepat Segi empat tepat, yang mempunyai dua medan jenis float64 lebar dan tinggi, yang digunakan untuk mewakili lebar dan tinggi segi empat tepat. Kita perlu menentukan kaedah Area() untuk jenis Rectangle untuk mengira luas segi empat tepat. Jenis Rectangle boleh melaksanakan antara muka Shape Kod sampel adalah seperti berikut:

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan jenis Rectangle dan melaksanakan kaedah Area(). Oleh kerana jenis Rectangle kami melaksanakan kaedah Area() yang ditakrifkan dalam antara muka Shape, kami boleh mengendalikannya sebagai jenis Shape Contohnya, gunakan pembolehubah jenis Shape untuk mewakili objek jenis Rectangle.

Dalam bahasa Go, pelaksanaan antara muka adalah tersirat. Ini bermakna selagi sesuatu jenis mentakrifkan semua kaedah yang ditakrifkan dalam antara muka, ia secara automatik dianggap untuk melaksanakan antara muka. Jenis Rectangle di atas secara automatik melaksanakan kaedah Area() dalam antara muka Shape, jadi ia boleh dianggap sebagai melaksanakan antara muka Shape.

Dalam bahasa Go, pelaksanaan polimorfisme bergantung pada jenis antara muka. Polimorfisme ialah keupayaan untuk menentukan jenis objek pada masa penyusunan, tetapi untuk menentukan jenis sebenar objek semasa runtime. Dalam bahasa Go, memandangkan antara muka ialah spesifikasi, sebarang jenis boleh dianggap sebagai jenis antara muka selagi ia melaksanakan antara muka. Ini membolehkan kami menggunakan nama kaedah yang sama untuk mengendalikan jenis objek yang berbeza, dengan itu mencapai polimorfisme.

Kita boleh menggambarkan pelaksanaan polimorfisme melalui contoh mudah. Katakan kita mempunyai jenis Bumi dan Bulan, yang kedua-duanya melaksanakan kaedah Putaran() untuk mengira tempoh putarannya. Kita perlu menulis fungsi umum yang menerima antara muka yang melaksanakan kaedah Putaran() dan mengira tempoh putaran objek. Seperti yang ditunjukkan di bawah:

type Earth struct{}

func (e Earth) Rotation() float64 {
    return 24
}

type Moon struct{}

func (m Moon) Rotation() float64 {
    return 27.3
}

type RotationCalculator interface {
    Rotation() float64
}

func CalculateRotationTime(obj RotationCalculator) {
    fmt.Println("Rotation time:", obj.Rotation())
}

func main() {
    var earthObj RotationCalculator = Earth{}
    CalculateRotationTime(earthObj)

    var moonObj RotationCalculator = Moon{}
    CalculateRotationTime(moonObj)
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan jenis Bumi dan jenis Bulan, yang kedua-duanya melaksanakan kaedah Putaran(). Kami juga mentakrifkan antara muka RotationCalculator, yang memerlukan pelaksanaan kaedah Rotation(). Kami menggunakan fungsi CalculateRotationTime(), yang menerima objek RotationCalculator dan mencetak tempoh putaran objek. Dalam fungsi utama, kami menggunakan objek jenis Earth dan Moon untuk memanggil fungsi CalculateRotationTime() dan mengeluarkan hasilnya. Memandangkan kedua-dua jenis Bumi dan Bulan melaksanakan kaedah Putaran() antara muka RotationCalculator, kami boleh mengendalikannya sebagai objek jenis RotationCalculator, mencapai polimorfisme.

Ringkasnya, antara muka dan polimorfisme dalam bahasa Go ialah ciri penting bahasa ini membolehkan kami melakukan operasi biasa pada pelbagai jenis objek dan mencapai penggunaan semula kod yang cekap. Dalam pengaturcaraan sebenar, kita perlu memahami dengan mendalam dan menggunakan antara muka dan polimorfisme untuk menggunakan ciri bahasa Go dengan lebih baik dan meningkatkan kecekapan dan kebolehselenggaraan kod.

Atas ialah kandungan terperinci Antara muka dan polimorfisme dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan