1. 程式人生 > >Golang:Golang生成動態庫及呼叫

Golang:Golang生成動態庫及呼叫

簡介

目前go動態庫的生產只支援Linux,Windows下會報這樣的錯誤,`-buildmode=plugin not supported on windows/amd64`

CODE

plugin.so

package main



import (

    "fmt"

    )



func DCall(){
    fmt.Println("plugin.so was called") 
}

func DCallWithParam(msg string){
    fmt.Println("引數內容為:",msg) 
}


func main() {



    fmt
.Println("goroute全部退出") }

pluginload.go

package main

import (
    "plugin"
)

func main() {

    //載入動態庫
    p, err := plugin.Open("plugin.so")
    if err != nil {
        panic(err)
    }
    //查詢函式   
    f, err := p.Lookup("DCall")
    if err != nil {
        panic(err)
    }
    //轉換型別後呼叫函式   
    f.(func
())() f2, err := p.Lookup("DCallWithParam") if err != nil { panic(err) } //帶參函式的呼叫 f2.(func(string))("hello world,plugin.so") }

編譯動態庫
go build --buildmode=plugin plugin.go
呼叫動態庫
go run pluginload.go

這裡寫圖片描述