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.
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 }, })
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.
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 }, })
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!