2020 10 02 golang如何寫乙個外掛程式?

2022-06-09 07:39:11 字數 960 閱讀 9715

福哥答案2020-10-02:#福大大架構師每日一題#

簡單回答:

buildmode=plugin

plugin.open

p.lookup

[中級回答:](

golang的plugin是使用-buildmode=plugin 的編譯flag編譯出的軟體包,用於生成共享庫(.so)庫檔案。 go包中匯出的函式和變數顯示為elf符號,可以在另乙個golang程式中使用golang中的`plugin`包在執行時查詢和繫結它們。

先寫這樣一段plugin**:

package main

import "fmt"

// 包含乙個簡單函式的模組

func add(a int, b int) int

用下面的指令編譯成plugin:

go build -buildmode=plugin -o math.so

然後可以在另外乙個golang**中載入並呼叫編譯好的plugin:

// 載入plugin

plugins, err := filepath.glob("math.so")

if err != nil

fmt.printf("loading plugin %s", plugins[0])

p, err := plugin.open(plugins[0])

if err != nil

// 查詢叫add的函式

symbol, err := p.lookup("add")

if err != nil

addfunc, ok := symbol.(func(int, int) int)

if !ok

// 呼叫函式

addition := addfunc(3, 4)

fmt.printf("\naddition is:%d", addition)

如何寫乙個Stack?

1.棧是陣列 2.先進後出 3.出棧 4.入棧 手寫乙個雙向鍊錶 棧 public class stackpopandpush public stackpopandpush int lens 返回元素個數 public intsize 返回陣列長度,容量,棧資料長 private intcapaci...

如何寫乙個鍊錶

有的時候,處於記憶體中的資料並不是連續的。那麼這時候,我們就需要在 資料結構中新增乙個屬性,這個屬性會記錄下面乙個資料的位址。有了這個位址之後,所有的資料就像一條鍊子一樣串起來了,那麼這個位址屬性就起到了穿線鏈結的作用。相比較普通的線性結構,鍊錶結構的優勢是什麼呢?我們可以總結一下 1 單個節點建立...

如何寫乙個Vue元件

寫的是以.vue結尾的單檔案元件的寫法,是基於webpack構建的專案。template 模板 js 邏輯 css 樣式 每個元件都有屬於自己的模板,js和樣式。如果將乙個頁面比喻成一間房子的話,元件就是房子裡的客廳 臥室 廚房 廁所。如果把廚房單獨拿出來的話,元件又可以是刀 油煙機.等等。就是說頁...