prepend-statements
The prepend-statements
advice inserts new statements rendered by the provided code template before the matched AST node. This is often used to add logic in the preamble of function implementations, and the defer
keyword can be used to also introduce epilogue logic.
Execution Order: Multiple prepend-statements are executed in reverse order (last prepended executes first). Use namespace
and order
properties to control the relative execution order across different aspects.
Examples
prepend-statements:
imports:
ddtrace: github.com/DataDog/dd-trace-go/v2/ddtrace
ext: github.com/DataDog/dd-trace-go/v2/ddtrace/ext
globalconfig: github.com/DataDog/dd-trace-go/v2/internal/globalconfig
http: net/http
internal: github.com/DataDog/dd-trace-go/v2/internal
math: math
namingschema: github.com/DataDog/dd-trace-go/v2/internal/namingschema
tracer: github.com/DataDog/dd-trace-go/v2/ddtrace/tracer
template: "{{- $res := .Function.Result 0 -}}\ndefer func() {\n var analyticsRate float64\n if internal.BoolEnv(\"DD_TRACE_MUX_ANALYTICS_ENABLED\", false) {\n analyticsRate = 1.0\n } else {\n analyticsRate = globalconfig.AnalyticsRate()\n }\n\n {{ $res }}.__dd_config.headerTags = globalconfig.HeaderTagMap()\n {{ $res }}.__dd_config.ignoreRequest = func(*http.Request) bool { return false }\n {{ $res }}.__dd_config.resourceNamer = ddDefaultResourceNamer\n {{ $res }}.__dd_config.serviceName = namingschema.ServiceName(\"mux.router\")\n {{ $res }}.__dd_config.spanOpts = []ddtrace.StartSpanOption{\n tracer.Tag(ext.Component, \"gorilla/mux\"),\n tracer.Tag(ext.SpanKind, ext.SpanKindServer),\n }\n if !math.IsNaN(analyticsRate) {\n {{ $res }}.__dd_config.spanOpts = append(\n {{ $res }}.__dd_config.spanOpts,\n tracer.Tag(ext.EventSampleRate, analyticsRate),\n )\n }\n}()"