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

Bagaimanakah Saya Boleh Menggunakan Antara Muka Tersuai dengan Pemalam Go 1.8?

Susan Sarandon
Lepaskan: 2024-12-27 19:02:09
asal
264 orang telah melayarinya

How Can I Use Custom Interfaces with Go 1.8 Plugins?

Menggunakan Antara Muka Tersuai dalam Pemalam Go 1.8

Dalam Go 1.8, pemalam boleh menggunakan antara muka tersuai. Walau bagaimanapun, terdapat beberapa had yang perlu dipertimbangkan.

Menggunakan Pakej Luaran

Satu pendekatan adalah untuk mentakrifkan antara muka dalam pakej luaran dan mempunyai kedua-dua pemalam dan aplikasi utama mengimportnya.

Sebagai contoh, buat antara muka dalam pakej yang dipanggil penapis:

package filter

type Filter interface {
    Name() string
    Age() int
}
Salin selepas log masuk

Dalam pemalam, import pakej penapis dan laksanakan antara muka:

package main

import (
    "fmt"
    "filter"
)

type plgFilter struct{}

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

func GetFilter() (f filter.Filter, err error) {
    f = plgFilter{}
    fmt.Printf("[plugin GetFilter] Returning filter: %T %v\n", f, f)
    return
}
Salin selepas log masuk

Dalam aplikasi utama, import pakej penapis dan muatkan pemalam:

package main

import (
    "fmt"
    "filter"
    "plugin"
)

func main() {
    p, err := plugin.Open("pg/pg.so")
    if err != nil {
        panic(err)
    }

    GetFilter, err := p.Lookup("GetFilter")
    if err != nil {
        panic(err)
    }
    filter, err := GetFilter.(func() (filter.Filter, error))()
    fmt.Printf("GetFilter result: %T %v %v\n", filter, filter, err)
    fmt.Println("\tName:", filter.Name())
    fmt.Println("\tAge:", filter.Age())
}
Salin selepas log masuk

Pendekatan ini memastikan bahawa pemalam mempunyai akses kepada definisi antara muka.

Antara Muka Pengembalian{}

Pilihan lain ialah memastikan pemalam mengembalikan nilai antara muka jenis{}. Aplikasi utama kemudiannya boleh mentakrifkan antara muka yang diharapkan dan menggunakan penegasan jenis pada nilai yang dikembalikan.

Sebagai contoh, dalam pemalam:

package main

import (
    "fmt"
)

type plgFilter struct{}

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

func GetFilterIface() (f interface{}, err error) {
    f = plgFilter{}
    fmt.Printf("[plugin GetFilterIface] Returning filter: %T %v\n", f, f)
    return
}
Salin selepas log masuk

Dalam aplikasi utama:

package main

import (
    "fmt"
    "plugin"
)

func main() {
    p, err := plugin.Open("pg/pg.so")
    if err != nil {
        panic(err)
    }

    GetFilterIface, err := p.Lookup("GetFilterIface")
    if err != nil {
        panic(err)
    }
    filterIface, err := GetFilterIface.(func() (interface{}, error))()
    fmt.Printf("GetFilterIface result: %T %v %v\n", filterIface, filterIface, err)
    myfilter := filterIface.(MyFilter)
    fmt.Println("\tName:", myfilter.Name())
    fmt.Println("\tAge:", myfilter.Age())
}

type MyFilter interface {
    Name() string
    Age() int
}
Salin selepas log masuk

Pendekatan ini memberikan lebih fleksibiliti, tetapi memerlukan penegasan jenis dalam aplikasi.

Penghadan

Perhatikan bahawa antara muka tersuai berfungsi hanya jika antara muka ditakrifkan di luar pemalam. Ini kerana pemalam Go ialah modul serba lengkap yang tidak boleh mengakses jenis yang ditakrifkan dalam pakej lain.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Antara Muka Tersuai dengan Pemalam Go 1.8?. 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