I have the following two files:

// hello.go
package main

import (
"fmt"
)

func Hello() {
fmt.Println("hello")
}

func main() {}


build as plugin: `go build -buildmode=plugin hello.go`

// main.go
package main

import (
"log"
"plugin"
"time"
)

func main() {
for {
log.Println("start load plugin.")
time.Sleep(time.Second)
p, err := plugin.Open("../hello.so")
if err != nil {
log.Println(err)
continue
}

sym, err := p.Lookup("Hello")
if err != nil {
log.Println(err)
continue
}

hello, ok := sym.(func())
if !ok {
log.Println(err)
continue
}

for i := 0; i < 10; i++ {
hello()
time.Sleep(time.Second)
}
}
}

// `go build main.go`


main.go keeps calling the Hello function from hello.so file. I tried to 
modify the hello.go file, and re-built the hello.so file. The so file was 
successfully replaced. However, the main process was still printing the old 
world "hello". It seems the so file in memory was not changed, even the 
main program reloaded the so file once for a while. 
Restarting the main process could make it work. But it is not what i am 
looking for. 

How could I dynamically update the so file and make it applied in main 
process?
Thanks.


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to