package main import ( "github.com/robertkrimen/otto" "log" ) func main() { log.Printf("Creating JS interpreter") js := otto.New() var function otto.Value log.Printf("Defining setEnrichFunction") js.Set("setEnrichFunction", func(call otto.FunctionCall) otto.Value { function = call.Argument(0) if class := function.Class(); class != "Function" { log.Fatalf("setEnrichFunction: expected Function, got %s instead.", class) } return otto.UndefinedValue() }) log.Printf("Registering enrich function") js.Run(` setEnrichFunction(function(data) { data.timestamp = new Date().toUTCString(); }); `) data := map[string]string{ "foo": "bar", "theAnswer": "42", } log.Printf("raw data: %#v", data) arg, err := js.ToValue(data) if err != nil { log.Fatalf("couldn't convert message to JS value") } log.Printf("Calling enrich function") _, err = function.Call(otto.NullValue(), arg) if err != nil { log.Fatalf("calling enrich function failed: %v", err) } log.Printf("enriched data: %#v", data) }