golang-plugin-example

module
v0.0.0-...-169aa6b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2018 License: MIT

README

GO Plugins example

A small example application for using plugins in go.
Using plugins, it is possible to add/remove functionality to a compiled go program at runtime.

In this example, I expect that a plugin has a function New (see: cmd/cli/main.go +29).
I also expect that the return value of this New function implements a Module interface (see: pkg/wrapper/module.go). In this application, a Module has needs a fuction called Execute().
If you want to create a new plugin for this application, you have to implement those two functions at a minimum.

Example:

Clone and build the example application:

go get -u github.com/xellio/golang-plugin-example
cd $GOPATH/src/github.com/xellio/golang-plugin-example/
make

Run the application:

./bin/modules

Hello from FIRST...
Hello from SECOND...
Hello from THIRD - Written in C...

Hello from FIRST...
Hello from THIRD - Written in C...
Hello from SECOND...

Hello from FIRST...
Hello from SECOND...
Hello from THIRD - Written in C...
...

NOTE: In this example, the plugins were executed in a goroutine - so the order of the output can change.

In the application root ($GOPATH/src/github.com/xellio/golang-plugin-example/) you will find a plugins/ directory, conaining the loaded plugins (.so files):

...
├── plugins
│   ├── first_plugin.so
│   ├── second_plugin.so
│   └── third_plugin.so
...

Removing one of those plugins while running the application will stop executing the removed plugin:

mv ./plugins/second_plugin.so .

Output:

Hello from FIRST...
Hello from THIRD - Written in C...
Hello from SECOND...

Hello from THIRD - Written in C...
Hello from FIRST...

Hello from FIRST...
Hello from THIRD - Written in C...

Hello from THIRD - Written in C...
Hello from FIRST...

(Re)adding a plugin to the plugins/ directory will (re)execute the plugin:

mv ./second_plugin.so ./plugins/

Output:

Hello from THIRD - Written in C...
Hello from FIRST...

Hello from FIRST...
Hello from THIRD - Written in C...
Hello from SECOND...

Hello from FIRST...
Hello from THIRD - Written in C...
Hello from SECOND...

Directories

Path Synopsis
cmd
cli
modules
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL