in tools/go-agent/instrument/entry/instrument.go [54:94]
func (i *Instrument) WriteExtraFiles(dir string) ([]string, error) {
file, err := tools.WriteFile(dir, "skywalking_init.go", tools.ExecuteTemplate(`package main
import (
_ "unsafe"
)
//go:linkname {{.GetGlobalOperatorLinkMethod}} {{.GetGlobalOperatorLinkMethod}}
var {{.GetGlobalOperatorLinkMethod}} func() interface{}
type skywalkingTracerInitiator interface {
InitTracer(map[string]interface{})
}
func init() {
if {{.GetGlobalOperatorLinkMethod}} != nil {
op := {{.GetGlobalOperatorLinkMethod}}()
if op == nil {
return
}
tracer, ok := op.(skywalkingTracerInitiator)
if !ok {
return
}
tracer.InitTracer(nil)
}
}
`, struct {
GetGlobalOperatorLinkMethod string
Config *config.Config
}{
GetGlobalOperatorLinkMethod: consts.GlobalTracerGetMethodName,
Config: config.GetConfig(),
}))
if err != nil {
return nil, err
}
result := make([]string, 0)
result = append(result, file)
return result, nil
}