Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengendalikan Antara Muka Pelaksana Struktur Pemulangan Fungsi Go?

Bagaimanakah Saya Boleh Mengendalikan Antara Muka Pelaksana Struktur Pemulangan Fungsi Go?

Barbara Streisand
Lepaskan: 2024-12-08 04:18:09
asal
489 orang telah melayarinya

How Can I Handle Go Functions Returning Structs Implementing Interfaces?

Jenis Fungsi Go yang Mengembalikan Struktur Dalam Antara Muka

Dalam Go, adalah perkara biasa untuk menggunakan antara muka untuk mentakrifkan gelagat struct. Walau bagaimanapun, apabila bekerja dengan fungsi yang mengembalikan struktur yang melaksanakan antara muka, anda mungkin menghadapi ralat keselamatan jenis.

Memahami Isu

Mari kita periksa contoh kod yang anda berikan:

package expensive

type myStruct struct { ... } // Struct with time-consuming methods
func CreateInstance() *myStruct { ... } // Expensive factory function
Salin selepas log masuk
package main

import "expensive"

type myInterface interface { DoSomething() }
type structToConstruct struct { factoryFunction func() myInterface }
func (s *structToConstruct) performAction() { instance := s.factoryFunction(); instance.DoSomething() }
Salin selepas log masuk

Di sini, anda menentukan fungsi kilang CreateInstance yang mengembalikan *myStruct. Anda kemudian mencipta antara muka myInterface yang *myStruct laksanakan. Walau bagaimanapun, anda memperuntukkan fungsi kilang kepada medan dalam structToConstruct yang menjangkakan fungsi mengembalikan myInterface, menyebabkan ralat penyusunan.

Menyelesaikan Isu

Untuk menyelesaikannya, anda mempunyai dua pilihan:

  1. Pembungkus Fungsi: Anda boleh membungkus fungsi kilang anda dalam pakej utama. Contohnya:
wrapper := func() myInterface { return expensive.CreateInstance() }
thing := structToConstruct{wrapper}
Salin selepas log masuk
  1. Fungsi Kilang yang disemak: Sebagai alternatif, anda boleh mengubah suai CreateInstance untuk mengembalikan myInterface secara terus:
func CreateInstance() myInterface { return &myStruct{} }
Salin selepas log masuk

Mengapa Pilihan 1 Berfungsi

Dalam Pilihan 1, fungsi pembungkus menukar hasil CreateInstance kepada myInterface sebelum memberikannya kepada factoryFunction. Ini memenuhi tandatangan jenis structToConstruct kerana fungsi pembalut sepadan dengan jenis fungsi yang dijangkakan.

Mengapa Pilihan 2 Memerlukan Cadangan 12754

Dalam Pilihan 2, jika anda cuba terus tetapkan CreateInstance kepada factoryFunction, Go akan mengadu kerana CreateInstance mengembalikan penunjuk berstruktur, bukan antara muka. Cadangan 12754 mencadangkan untuk melanjutkan bahasa untuk menyokong tugasan sedemikian, tetapi akhirnya ditolak.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Antara Muka Pelaksana Struktur Pemulangan Fungsi 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