inject-declarations
The inject-declarations
advice merges declarations produced by a code template into the matched node’s compilation unit.
This is often used to introduce new type definitions or declare foreign functions linked via //go:linkname
to avoid creating dependency cycles.
Examples
inject-declarations:
imports:
context: context
ddtrace: github.com/DataDog/dd-trace-go/v2/ddtrace
links:
- github.com/DataDog/dd-trace-go/v2/internal/appsec
- github.com/DataDog/dd-trace-go/v2/internal/appsec/emitter/httpsec
- github.com/DataDog/dd-trace-go/v2/ddtrace/tracer
template: |
//go:linkname __dd_appsec_RASPEnabled github.com/DataDog/dd-trace-go/v2/internal/appsec.RASPEnabled
func __dd_appsec_RASPEnabled() bool
//go:linkname __dd_httpsec_ProtectRoundTrip github.com/DataDog/dd-trace-go/v2/internal/appsec/emitter/httpsec.ProtectRoundTrip
func __dd_httpsec_ProtectRoundTrip(context.Context, string) error
//go:linkname __dd_tracer_SpanType github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.SpanType
func __dd_tracer_SpanType(string) ddtrace.StartSpanOption
//go:linkname __dd_tracer_ResourceName github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.ResourceName
func __dd_tracer_ResourceName(string) ddtrace.StartSpanOption
//go:linkname __dd_tracer_Tag github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.Tag
func __dd_tracer_Tag(string, any) ddtrace.StartSpanOption
//go:linkname __dd_tracer_StartSpanFromContext github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.StartSpanFromContext
func __dd_tracer_StartSpanFromContext(context.Context, string, ...ddtrace.StartSpanOption) (ddtrace.Span, context.Context)
//go:linkname __dd_tracer_WithError github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.WithError
func __dd_tracer_WithError(error) ddtrace.FinishOption
//go:linkname __dd_tracer_Inject github.com/DataDog/dd-trace-go/v2/ddtrace/tracer.Inject
func __dd_tracer_Inject(ddtrace.SpanContext, any) error
type __dd_tracer_HTTPHeadersCarrier Header
func (c __dd_tracer_HTTPHeadersCarrier) Set(key, val string) {
Header(c).Set(key, val)
}
inject-declarations:
imports:
ddtrace: github.com/DataDog/dd-trace-go/v2/ddtrace
http: net/http
internal: github.com/DataDog/dd-trace-go/v2/internal
telemetry: github.com/DataDog/dd-trace-go/v2/internal/telemetry
tracer: github.com/DataDog/dd-trace-go/v2/ddtrace/tracer
template: |-
type ddRouterConfig struct {
ignoreRequest func(*http.Request) bool
headerTags *internal.LockMap
resourceNamer func(*Router, *http.Request) string
serviceName string
spanOpts []ddtrace.StartSpanOption
}
func ddDefaultResourceNamer(router *Router, req *http.Request) string {
var (
match RouteMatch
route = "unknown"
)
if router.Match(req, &match) && match.Route != nil {
if r, err := match.Route.GetPathTemplate(); err == nil {
route = r
}
}
return fmt.Sprintf("%s %s", req.Method, route)
}
func init() {
telemetry.LoadIntegration("gorilla/mux")
tracer.MarkIntegrationImported("github.com/gorilla/mux")
}