Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pemalam dalam golang

Bagaimana untuk melaksanakan pemalam dalam golang

王林
王林asal
2023-05-10 19:59:351027semak imbas

Dengan pengembangan berterusan skala sistem perisian komputer, skalabiliti program telah menjadi tumpuan kebanyakan syarikat dan pasukan. Cara biasa untuk mencapai kebolehskalaan adalah melalui seni bina boleh pasang. Mekanisme pemalam membenarkan fungsi program dikembangkan pada bila-bila masa tanpa mengubah suai kod program secara langsung. Berbanding dengan seni bina modular tradisional, seni bina plug-in adalah lebih fleksibel, sangat padat dan boleh diurus. Artikel ini memperkenalkan cara mereka bentuk dan melaksanakan mekanisme pemalam dalam bahasa golang.

  1. Konsep pemalam

Pemalam merujuk kepada komponen yang boleh dimuatkan secara dinamik dan memanjangkan kefungsian program. Pemalam biasanya bebas daripada program utama dan boleh dimuatkan atau dipunggah semasa program utama sedang berjalan. Pemalam biasanya mengandungi satu atau lebih antara muka yang melaluinya ia berkomunikasi dengan program utama.

Dalam seni bina pemalam, program utama bertanggungjawab untuk memuatkan atau memunggah pemalam, berkomunikasi dengan pemalam dan menyelaraskan kerjasama antara pemalam. Pemalam bertanggungjawab untuk melaksanakan fungsi yang mereka sediakan dan mendedahkannya kepada program utama untuk panggilan melalui antara muka yang telah ditetapkan.

  1. pemalam golang

Dalam golang, anda boleh menggunakan perpustakaan pautan dinamik (Pustaka Pautan Dinamik) untuk mencapai pemalam Langkah-langkah khusus adalah seperti berikut:

  • Tentukan antara muka atau jenis struktur pemalam seperti yang diperlukan
  • Tulis kod pemalam dan susunkannya sebagai perpustakaan pautan dinamik
  • Sediakan antara muka fungsi atau panggilan fungsi perpustakaan dinamik dalam program utama Muatkan perpustakaan pautan dinamik dan panggil kod pemalam semasa masa jalan

Di bawah ini kami akan melaksanakan langkah demi langkah di atas.

  1. Tentukan antara muka pemalam

Kita perlu menentukan perkara yang perlu dilakukan oleh pemalam yang ingin kita laksanakan dan antara muka yang disediakannya. Mengambil program kalkulator mudah sebagai contoh, kami mentakrifkan antara muka pemalam seperti berikut:

package plugin

type CalculatorPlugin interface {
    GetName() string
    Add(int, int) int
    Sub(int, int) int
}
  1. Tulis kod pemalam

Kami menganggap terdapat dua palam- ins: AddPlugin dan SubPlugin. Mereka semua melaksanakan antara muka CalculatorPlugin.

AddPlugin melaksanakan dua kaedah: GetName() dan Add().

package main

import (
    "github.com/bwmarrin/discordgo"
    "github.com/derry6/DSGO_BOT/plugin"
)

type AddPlugin struct {
}

func (ap *AddPlugin) GetName() string {
    return "加法插件"
}

func (ap *AddPlugin) Add(a, b int) int {
    return a + b
}

func New() plugin.CalculatorPlugin {
    return &AddPlugin{}
}

func main() {}

SubPlugin melaksanakan dua kaedah: GetName() dan Sub().

package main

import (
    "github.com/bwmarrin/discordgo"
    "github.com/derry6/DSGO_BOT/plugin"
)

type SubPlugin struct {
}

func (sp *SubPlugin) GetName() string {
    return "减法插件"
}

func (sp *SubPlugin) Sub(a, b int) int {
    return a - b
}

func New() plugin.CalculatorPlugin {
    return &SubPlugin{}
}

func main() {}

Apa yang perlu diperhatikan dalam kod ialah fungsi New(), yang mengembalikan nilai jenis antara muka CalculatorPlugin Program utama akan menggunakan fungsi ini untuk memuatkan pemalam secara dinamik.

  1. Kompilasi pemalam

Gunakan arahan go build untuk menyusun pemalam dan menjana perpustakaan pautan dinamik.

go build -buildmode=plugin -o add.so add.go
go build -buildmode=plugin -o sub.so sub.go
  1. Memuatkan pemalam dalam program utama

Atur cara utama bertanggungjawab untuk memuatkan pemalam Kita perlu menentukan fungsi untuk memuatkan pemalam mengikut laluan di mana ia berada.

func LoadPlugin(path string) (p plugin.CalculatorPlugin, err error) {
    plugin, err := plugin.Open(path)
    if err != nil {
        return nil, err
    }
    symbol, err := plugin.Lookup("New")
    if err != nil {
        return nil, err
    }
    return symbol.(func() plugin.CalculatorPlugin)(), nil
}
  1. Menggunakan fungsi pemalam

Selepas program utama memuatkan pemalam, kita boleh mendapatkan nama pemalam dan melakukan penambahan dan penolakan operasi melalui kaedah yang disediakan oleh pemalam. Berikut ialah contoh kod:

package main

import (
    "fmt"
    "github.com/derry6/DSGO_BOT/plugin"
)

func main() {
    addPlugin, _ := LoadPlugin("./add.so")
    subPlugin, _ := LoadPlugin("./sub.so")

    fmt.Println("插件名称: ", addPlugin.GetName())
    fmt.Println("3 + 2 = ", addPlugin.Add(3, 2))

    fmt.Println("插件名称: ", subPlugin.GetName())
    fmt.Println("3 - 2 = ", subPlugin.Sub(3, 2))
}
  1. Ringkasan

Pemasukan dalam golang dicapai melalui perpustakaan pautan dinamik Dengan mekanisme pemalam, kod itu boleh kebolehskalaan dan kebolehselenggaraan yang sangat baik. Apabila kita perlu menambah fungsi baharu, kita hanya perlu menulis pemalam yang sepadan dan bukannya mengubah suai kod asal program. Idea reka bentuk seni bina plug-in dan pelaksanaan pemalam yang disusun golang boleh membolehkan kami mereka bentuk dan membangunkan kejuruteraan perisian dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemalam dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:bait golang kepada teksArtikel seterusnya:bait golang kepada teks