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

Bolehkah Pelaksanaan Antara Muka Tanpa Nama Dicapai dalam Go?

DDD
Lepaskan: 2024-11-26 18:35:13
asal
196 orang telah melayarinya

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 },
})
Salin selepas log masuk

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 }
Salin selepas log masuk

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
}
Salin selepas log masuk

Contoh penggunaan:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})
Salin selepas log masuk

Pelaksanaan Bukan Fungsian

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

var op NumOp = struct{ NumOp }{}
Salin selepas log masuk

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!

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