Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah antara muka ditakrifkan dan dilaksanakan dalam bahasa Go?

Bagaimanakah antara muka ditakrifkan dan dilaksanakan dalam bahasa Go?

PHPz
PHPzasal
2023-06-10 16:46:371813semak imbas

Bagaimanakah antara muka ditakrifkan dan dilaksanakan dalam bahasa Go?

Bahasa Go ialah bahasa pengaturcaraan moden Ia direka bentuk agar ringkas dan mudah difahami, serta ia juga cekap, pantas dan boleh dipercayai. Dalam bahasa Go, antara muka ialah konsep yang sangat penting. Melalui antara muka, kita boleh menentukan koleksi kaedah dan kemudian membiarkan jenis lain melaksanakan kaedah ini. Dalam artikel ini, kami akan meneroka secara mendalam definisi dan pelaksanaan antara muka dalam bahasa Go.

1 Definisi antara muka

Dalam Go, antara muka ialah koleksi kaedah. Khususnya, antara muka mengandungi beberapa kaedah, setiap satunya mesti mempunyai tandatangan tetap. Kaedah ini boleh menjadi kaedah kosong, atau ia boleh mempunyai beberapa kod pelaksanaan tertentu. Set kaedah yang ditakrifkan melalui antara muka dikaitkan dengan pelaksanaan jenis khusus dan boleh digunakan untuk melaksanakan polimorfisme.

Cara untuk mentakrifkan antara muka adalah sangat mudah Anda hanya perlu menggunakan sintaks berikut:

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

Antaranya, nama antara muka ialah nama yang kami tentukan untuk kaedah 1, kaedah 2, dsb. adalah semua nama antara muka Mengandungi kaedah.

Sebagai contoh, kami mentakrifkan Pengurus antara muka, yang mengandungi dua kaedah: Tambah dan Alih Keluar. Kodnya adalah seperti berikut:

type Manager interface {
    Add(name string) error
    Remove(name string) error
}

Di sini, kami mentakrifkan antara muka Pengurus, yang mengandungi kaedah Tambah dan Alih Keluar Kedua-dua kaedah menerima nama parameter jenis rentetan dan mengembalikan nilai jenis ralat.

2. Pelaksanaan antara muka

Dalam Go, sebarang jenis boleh melaksanakan antara muka. Jenis di sini boleh menjadi struktur, jenis data asas, fungsi, dsb. Selagi sesuatu jenis melaksanakan semua kaedah yang ditakrifkan oleh antara muka, maka jenis itu boleh dipertimbangkan untuk melaksanakan antara muka.

Pelaksanaan antara muka boleh dilakukan di mana-mana sahaja, iaitu, ia boleh dilakukan dalam pakej semasa atau dalam pakej lain. Apabila jenis melaksanakan antara muka, ia boleh digunakan dalam kod pemanggil tanpa mengambil berat tentang jenis tertentu.

Sebagai contoh, kita boleh mentakrifkan jenis MysqlManager untuk melaksanakan antara muka Pengurus:

type MysqlManager struct {}

func (mm *MysqlManager) Add(name string) error {
    // Add logic handling here
    return nil
}
func (mm *MysqlManager) Remove(name string) error {
    // Remove logic handling here
    return nil
}

Dalam kod di atas, kami mentakrifkan jenis MysqlManager, yang melaksanakan antara muka Pengurus, dalam kaedah Tambah The logik menambah data dilaksanakan dalam kaedah, dan logik memadam data dilaksanakan dalam kaedah Buang. Dengan cara ini, kita boleh menggunakan jenis MysqlManager dan bukannya antara muka Pengurus dan menggunakan antara muka Pengurus dalam kod pemanggil.

Sudah tentu, kami juga boleh mentakrifkan jenis RedisManager untuk melaksanakan antara muka Pengurus:

type RedisManager struct {}

func (rm *RedisManager) Add(name string) error {
    // Add logic handling here
    return nil
}
func (rm *RedisManager) Remove(name string) error {
    // Remove logic handling here
    return nil
}

Dalam kod di atas, kami mentakrifkan jenis RedisManager, yang turut melaksanakan antara muka Pengurus menambah data dilaksanakan dalam kaedah Tambah, dan logik pemadaman data dilaksanakan dalam kaedah Alih Keluar. Dengan cara ini, kita boleh memilih untuk menggunakan sumber data yang berbeza mengikut situasi yang berbeza apabila benar-benar menggunakannya, tanpa mengambil kira jenis sumber data tertentu.

3. Penukaran jenis

Memandangkan antara muka bukan jenis tertentu, ia hanyalah koleksi kaedah, jadi kami perlu melakukan penukaran jenis apabila menggunakannya. Penukaran jenis di sini adalah untuk menukar jenis yang melaksanakan antara muka kepada jenis antara muka.

Dalam Go, terdapat dua bentuk penukaran jenis: satu dilemparkan dan satu lagi ialah penegasan jenis.

  1. Penukaran jenis paksa

Apabila kami menukar jenis yang melaksanakan antara muka kepada jenis antara muka, kami boleh menggunakan penukaran jenis paksa. Format sintaks kaedah ini adalah seperti berikut:

var i interface{} = MysqlManager{}
mm := i.(Manager)

Dalam kod di atas, kami mentakrifkan pembolehubah i, jenisnya ialah antara muka{}, dan kemudian memberikan contoh MysqlManager kepadanya. Seterusnya, kami menggunakan cast untuk menukar i kepada pembolehubah mm jenis antara muka Pengurus.

  1. Jenis penegasan

Selain penukaran jenis paksa, Go juga menyediakan kaedah penukaran jenis lain yang dipanggil penegasan jenis. Format sintaks bagi penegasan jenis adalah seperti berikut:

var i interface{} = MysqlManager{}
mm, ok := i.(Manager)

Dalam contoh ini, kami mentakrifkan pembolehubah i yang jenisnya ialah antara muka{}, dan kemudian memberikan contoh MysqlManager kepadanya. Seterusnya, kami menggunakan penegasan jenis untuk cuba menukar i kepada pembolehubah mm bagi jenis antara muka Pengurus dan menggunakan pembolehubah ok untuk menentukan sama ada penukaran itu berjaya. Jika penukaran berjaya, nilai ok adalah benar, jika tidak ia adalah palsu.

4. Ringkasan

Dalam artikel ini, kami mempunyai perbincangan mendalam tentang definisi dan pelaksanaan antara muka dalam bahasa Go. Ia boleh dilihat bahawa antara muka adalah konsep yang sangat penting dalam Go, yang boleh digunakan untuk melaksanakan polimorfisme. Dalam Go, sebarang jenis boleh melaksanakan antara muka, selagi ia melaksanakan semua kaedah yang ditakrifkan oleh antara muka. Apabila sesuatu jenis melaksanakan antara muka, ia boleh digunakan dalam kod pemanggil tanpa mengambil berat tentang jenis tertentu. Apabila menggunakan antara muka, kita perlu melakukan penukaran jenis, yang termasuk penegasan cast dan jenis.

Atas ialah kandungan terperinci Bagaimanakah antara muka ditakrifkan dan dilaksanakan dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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