Rumah >pembangunan bahagian belakang >Golang >Bolehkah Pelaksanaan Antara Muka Tanpa Nama Dicapai dalam Go?

Bolehkah Pelaksanaan Antara Muka Tanpa Nama Dicapai dalam Go?

DDD
DDDasal
2024-11-26 18:35:13256semak imbas

Can Anonymous Interface Implementations Be Achieved in Go?

Pelaksanaan Antara Muka Tanpa Nama dalam Go

Pengenalan

Go membenarkan definisi jenis tersuai menggunakan antara muka. Walau bagaimanapun, ia menimbulkan persoalan sama ada mungkin untuk mewujudkan pelaksanaan tanpa nama bagi antara muka untuk situasi di mana fungsi tertentu perlu dilaksanakan sebagai operasi mudah.

Pelaksanaan Tanpa Nama dengan Fungsi

Kod pseudo dengan syarat mencadangkan mewujudkan pelaksanaan tanpa nama yang serupa kepada:

RandomNumOp({
   Binary: func(a, b int) int { return a + b },
   Ternary: func(a, b, c int) int { return a + b + c },
})

Keterbatasan

Walau bagaimanapun, pendekatan ini tidak boleh dilaksanakan secara langsung dalam Go kerana pengisytiharan kaedah mesti ditakrifkan pada peringkat fail. Oleh itu, untuk melaksanakan antara muka dengan pelbagai kaedah, pengisytiharan kaedah eksplisit diperlukan.

Pelaksanaan Boleh Kerja

Untuk mendapatkan pelaksanaan yang boleh dilaksanakan, anda boleh menggunakan struct sedia ada atau mencipta pelaksanaan "dummy" untuk menekankan kekurangan akibat. Berikut ialah contoh:

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }

Sebagai alternatif, pertimbangkan jenis struct delegator yang membolehkan anda menyediakan fungsi secara dinamik untuk kaedah:

type CustomOp struct {
    binary  func(int, int) int
    ternary func(int, int, int) int
}

func (cop CustomOp) Binary(a, b int) int {
    if cop.binary != nil {
        return cop.binary(a, b)
    }
    return 0
}

func (cop CustomOp) Ternary(a, b, c int) int {
    if cop.ternary != nil {
        return cop.ternary(a, b, c)
    }
    return 0
}

Contoh penggunaan:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})

Pelaksanaan Bukan Fungsian

Jika pelaksanaan anda tidak memerlukan kaedah berfungsi, anda boleh menggunakan literal struct tanpa nama:

var op NumOp = struct{ NumOp }{}

Atas ialah kandungan terperinci Bolehkah Pelaksanaan Antara Muka Tanpa Nama Dicapai dalam 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