Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menetapkan Fungsi Mengembalikan Struktur Melaksanakan Antara Muka dalam Go?

Bagaimana untuk Menetapkan Fungsi Mengembalikan Struktur Melaksanakan Antara Muka dalam Go?

Barbara Streisand
Lepaskan: 2024-12-06 20:28:13
asal
887 orang telah melayarinya

How to Assign a Function Returning a Struct Implementing an Interface in Go?

Menggunakan Jenis Fungsi Go yang Mengembalikan Struktur dengan Antara Muka

Soalan:

Dalam Go, saya mempunyai struct dalam satu pakej yang melaksanakan antara muka. Dalam pakej bergantung yang lain, saya ingin mencipta pelaksanaan palsu bagi struct ini untuk tujuan ujian. Walau bagaimanapun, Go merungut tentang keselamatan jenis apabila saya cuba menetapkan fungsi mengembalikan struct yang melaksanakan antara muka kepada pembolehubah antara muka itu.

Seni Bina:

// Package expensive
type myStruct struct{}

func (m *myStruct) DoSomething() {...}
func (m *myStruct) DoSomethingElse() {...}
func CreateInstance() *myStruct {...} // Expensive to call

// Package main
type myInterface interface {
    DoSomething()
}

type structToConstruct struct {
    factoryFunction func() myInterface
}
func (s *structToConstruct) performAction() {...}
Salin selepas log masuk

Ralat:

"tidak boleh menggunakan mahal.CreateInstance (taip func() *expensive.myStruct) sebagai taip func() myInterface dalam nilai medan"

Jawapan:

Isu timbul kerana fungsi CreateInstance mengembalikan nilai *myStruct , yang berbeza daripada func() jenis myInterface yang diperlukan oleh factoryFunction. Untuk menyelesaikan masalah ini:

// Package main
type myInterface interface {
    DoSomething()
}

type myStruct struct{}

func (m *myStruct) DoSomething() {...}

func getInstance() myInterface {
    return &myStruct{}
}
Salin selepas log masuk

Dengan pengubahsuaian ini, getInstance kini mengembalikan jenis myInterface, membenarkannya untuk diberikan kepada factoryFunction.

Nota Tambahan:

  • Pada asalnya, soalan melibatkan jenis fungsi yang mengembalikan penunjuk kepada struct sebaliknya daripada struct itu sendiri, yang menyebabkan jenis tidak padan.
  • Untuk melaksanakan tingkah laku ini dalam kod asal, fungsi pembungkus boleh digunakan:
wrapper := func() myInterface {
    return expensive.CreateInstance()
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Fungsi Mengembalikan Struktur Melaksanakan Antara Muka 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan