parent
012d5d6b34
commit
7321b29efe
@ -0,0 +1,54 @@
|
||||
garble build -buildmode=plugin ./plugin
|
||||
binsubstr plugin.so 'PublicVar' 'PublicFunc'
|
||||
! binsubstr plugin.so 'privateFunc'
|
||||
|
||||
# Note that we need -trimpath; see the caveat section in the README.
|
||||
go build -trimpath
|
||||
exec ./main
|
||||
cmp stdout main.stdout
|
||||
binsubstr main$exe 'PublicVar' 'PublicFunc'
|
||||
! binsubstr plugin.so 'privateFunc'
|
||||
|
||||
[short] stop # no need to verify this with -short
|
||||
|
||||
go build -buildmode=plugin ./plugin
|
||||
binsubstr plugin.so 'PublicVar' 'PublicFunc' 'privateFunc'
|
||||
go build
|
||||
exec ./main
|
||||
cmp stdout main.stdout
|
||||
|
||||
-- go.mod --
|
||||
module test/main
|
||||
-- plugin/main.go --
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
var PublicVar int
|
||||
|
||||
func privateFunc(n int) { fmt.Printf("Hello, number %d\n", n) }
|
||||
|
||||
func PublicFunc() { privateFunc(PublicVar) }
|
||||
-- main.go --
|
||||
package main
|
||||
|
||||
import "plugin"
|
||||
|
||||
func main() {
|
||||
p, err := plugin.Open("plugin.so")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
v, err := p.Lookup("PublicVar")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f, err := p.Lookup("PublicFunc")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
*v.(*int) = 7
|
||||
f.(func())()
|
||||
}
|
||||
-- main.stdout --
|
||||
Hello, number 7
|
Loading…
Reference in New Issue