Our great sponsors
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
A cool solution I saw was Traefik's yaegi module. They basically created an interpreted scripting language with Go compatible syntax (turning Go into an interpreted, not compiled, language). I haven't tried this but it sounds like it brings the better parts of dynamic languages like Python's plugin support to Go - plugin writers can still write "Go" code, which can load dynamically.
Other approaches I've seen are similar to yaegi but will embed another scripting language such as JavaScript or Lua. My personal favorite of these is goja, a JavaScript interpreter written natively in Go (no cgo dependency), it supports a lot of ES6+ modern syntax features of JavaScript. Being natively in Go, you can bind your Go functions and types and call them bidirectionally, so you can expose a surface area of internal API functions to your JS interpreter and build a scripting system for users to extend your app dynamically.
I did some research and found a WebAssembly runtime that can run Go code that has been compiled to WASM. It seems to me that one could implement a plugin system using this. I might try.
Another Wasm runtime to check out is https://github.com/tetratelabs/wazero