福哥答案2020-10-02:#福大大架構師每日一題#
簡單回答:
buildmode=plugin
plugin.open
p.lookup
[中級回答:](
golang的plugin是使用-buildmode=plugin 的編譯flag編譯出的軟體包,用於生成共享庫(.so)庫檔案。 go包中匯出的函式和變數顯示為elf符號,可以在另乙個golang程式中使用golang中的`plugin`包在執行時查詢和繫結它們。
先寫這樣一段plugin**:
package mainimport "fmt"
// 包含乙個簡單函式的模組
func add(a int, b int) int
用下面的指令編譯成plugin:
go build -buildmode=plugin -o math.so
然後可以在另外乙個golang**中載入並呼叫編譯好的plugin:
// 載入pluginplugins, 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和樣式。如果將乙個頁面比喻成一間房子的話,元件就是房子裡的客廳 臥室 廚房 廁所。如果把廚房單獨拿出來的話,元件又可以是刀 油煙機.等等。就是說頁...