Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menggunakan Antara Muka Tersuai dengan Berkesan dalam Pemalam Go?

Bagaimanakah Saya Boleh Menggunakan Antara Muka Tersuai dengan Berkesan dalam Pemalam Go?

DDD
Lepaskan: 2024-12-24 03:47:18
asal
160 orang telah melayarinya

How Can I Use Custom Interfaces Effectively within Go Plugins?

Antara Muka Tersuai dalam Pemalam Go

Soalan: Bagaimanakah saya boleh menggunakan antara muka tersuai dengan pemalam Go?

Latar Belakang: Antara muka tersuai adalah penting untuk melaksanakan boleh guna semula dan komponen perisian yang boleh diperluaskan. Walau bagaimanapun, percubaan awal untuk menggunakannya dalam pemalam Go mengakibatkan ralat berikut:

panic: interface conversion: plugin.Symbol is func() (filter.Filter, error), not func() (filter.Filter, error)
Salin selepas log masuk

Jawapan:

Sementara pemalam Go tidak boleh mengakses jenis yang ditentukan dalam pemalam itu sendiri , adalah mungkin untuk menggunakan antara muka tersuai dengan mengikut kaedah ini:

1. Menggunakan Pakej Biasa:

Tentukan antara muka dalam pakej yang diimport oleh pemalam dan aplikasi utama. Pendekatan ini membolehkan kedua-dua komponen menggunakan definisi jenis yang sama.

2. Mengembalikan Antara Muka{} daripada Pemalam:

Minta fungsi pemalam mengembalikan nilai antara muka jenis{}. Aplikasi utama kemudiannya boleh mentakrifkan penegasan jenis pada nilai yang dikembalikan untuk menggunakan antara muka tersuai.

Contoh:

Utama Aplikasi:

package main

import (
    "fmt"
    "plugin"

    "github.com/fagongzi/gateway/pkg/filter"
)

func main() {
    // ...
    GetInstance(func() (filter.Filter, error)) // Error occurs
}
Salin selepas log masuk

Pemalam:

package plugin

import "github.com/fagongzi/gateway/pkg/filter"

type plgFilter struct{}

func (plgFilter) Name() string   { return "Bob" }
func (plgFilter) Age() int      { return 23 }

// Return an "empty" filter to satisfy the function signature
func GetInstance() (filter.Filter, error)         { return nil, nil }
func GetInstanceInter() (interface{}, error)       { return &plgFilter{}, nil }
func GetInstancePtr() (*plgFilter, error)      { return &plgFilter{}, nil }
Salin selepas log masuk

Perbandingan:

  • Pilihan 1: Memerlukan kehadiran antara muka dalam kedua-dua pemalam dan aplikasi kod.
  • Pilihan 2: Membenarkan pemalam mengembalikan nilai apa-apa jenis, menawarkan fleksibiliti yang lebih besar.

Nota Tambahan:

  • Antara muka tersuai hanya boleh digunakan dalam pemalam yang tidak mempunyai pemalam lain kebergantungan.
  • Pemalam tidak boleh menentukan antara muka mereka sendiri yang boleh dirujuk daripada aplikasi utama.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Antara Muka Tersuai dengan Berkesan dalam Pemalam 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