示例
go.opentelemetry.io/otel/sdk v1.43.0: NewTracerProvider, WithSyncer, WithSampler
已验证示例 — golang go.opentelemetry.io/otel/sdk v1.43.0: NewTracerProvider, WithSyncer, WithSampler. contract 在 go 1.26 · linux alpine/x64 · docker 上运行并通过.
sha256:85ad078a5ad2312eb853bc3d341466eb5417f52cfc2c0379258a322b953f7340
本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。
提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。
MIT-0
执行证据
声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。
- 证据依据
- 签名契约通过
- 验证回执
- 1
- 构建过它的签名密钥
- 1
声明的环境
linux 24 · ubuntu · glibc 2.39 x64 go
验证运行环境
| 环境 | 契约 | 阶段 | 运行日期 |
|---|---|---|---|
| go 1.26 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · golang@1 |
2026-08-19 |
案例
HOW- 目标
- verify pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0
- 符号
-
- NewTracerProvider
- WithSyncer
- WithSampler
- WithResource
- NewInMemoryExporter
- 创建时间
- 2026-08-19T21:19:55Z
契约
- sdktrace.NewTracerProvider creates a configured TracerProvider with span processors and samplers
- sdktrace.WithSyncer registers a span exporter using a SimpleSpanProcessor to export spans synchronously
- sdktrace.WithSampler configures sampling behavior for generated spans
- sdktrace.WithResource attaches resource attributes to all spans produced by the TracerProvider
- tracetest.NewInMemoryExporter records spans in memory for inspection and testing
文件
- PROMPT.md
- csx.json
- go.mod
- go.sum
- main.go
- spec.json
- test/contract.go
源代码
Clean-room public code sample — generation instructions
Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.
A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.
Goal: verify pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0
Kind: HOW
Use EXACTLY these public packages and versions:
- pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0
Constraints:
- executionContext: node
Required runtime conditions:
- ecosystem: npm
- language: javascript
- moduleSystem: cjs
- packageManager: npm@10.9.8
- runtime: node@22.23.2
Rules:
- One focused purpose; the smallest project that proves the goal.
- Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
- Pin every dependency with a lockfile so resolution is reproducible.
- No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
- No personal names, emails, company names, or project identifiers of any kind.
- No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
- Keep it under 200 files and 256KB packed.
{"case":{"caseId":"case:sha256:32e9de7f287cf5bdb38ac03651de254e7dd99aedc36b2221400d666e130e5e44","contract":["sdktrace.NewTracerProvider creates a configured TracerProvider with span processors and samplers","sdktrace.WithSyncer registers a span exporter using a SimpleSpanProcessor to export spans synchronously","sdktrace.WithSampler configures sampling behavior for generated spans","sdktrace.WithResource attaches resource attributes to all spans produced by the TracerProvider","tracetest.NewInMemoryExporter records spans in memory for inspection and testing"],"goal":"verify pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0","kind":"HOW","packages":["pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0"],"schemaVersion":1,"symbols":["NewTracerProvider","WithSyncer","WithSampler","WithResource","NewInMemoryExporter"]},"contractCommand":["go","run","./test"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"golang","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"go","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0"],"schemaVersion":1,"symbols":["NewTracerProvider","WithSyncer","WithSampler","WithResource","NewInMemoryExporter"],"verifierAdapter":"golang@1"}
module example.com/sample
go 1.26.6
require (
go.opentelemetry.io/otel v1.43.0
go.opentelemetry.io/otel/sdk v1.43.0
go.opentelemetry.io/otel/trace v1.43.0
)
require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/uuid v1.6.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel/metric v1.43.0 // indirect
golang.org/x/sys v0.42.0 // indirect
)
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
package main
import (
"context"
"fmt"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
"go.opentelemetry.io/otel/trace"
)
// TelemetryPipeline manages an OpenTelemetry trace pipeline.
type TelemetryPipeline struct {
exporter *tracetest.InMemoryExporter
provider *sdktrace.TracerProvider
}
// NewTelemetryPipeline configures an OpenTelemetry SDK tracer provider with in-memory exporting.
func NewTelemetryPipeline(serviceName string) (*TelemetryPipeline, error) {
exporter := tracetest.NewInMemoryExporter()
res, err := resource.Merge(
resource.Default(),
resource.NewSchemaless(
semconv.ServiceNameKey.String(serviceName),
attribute.String("environment", "demonstration"),
),
)
if err != nil {
return nil, fmt.Errorf("failed to create resource: %w", err)
}
provider := sdktrace.NewTracerProvider(
sdktrace.WithSyncer(exporter),
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(res),
)
return &TelemetryPipeline{
exporter: exporter,
provider: provider,
}, nil
}
// ExecuteTask runs an operation instrumented with an OpenTelemetry trace span.
func (p *TelemetryPipeline) ExecuteTask(ctx context.Context, taskName string) error {
tracer := p.provider.Tracer("example.com/task-runner")
ctx, span := tracer.Start(ctx, taskName, trace.WithSpanKind(trace.SpanKindInternal))
defer span.End()
span.SetAttributes(
attribute.String("task.status", "executing"),
attribute.Int("task.items_count", 3),
)
span.AddEvent("task_step_completed", trace.WithAttributes(
attribute.String("step.name", "initialization"),
))
return nil
}
// Spans returns recorded span snapshots from the in-memory exporter.
func (p *TelemetryPipeline) Spans() tracetest.SpanStubs {
return p.exporter.GetSpans()
}
// Shutdown flushes and terminates the pipeline.
func (p *TelemetryPipeline) Shutdown(ctx context.Context) error {
return p.provider.Shutdown(ctx)
}
func main() {
ctx := context.Background()
pipeline, err := NewTelemetryPipeline("example-service")
if err != nil {
fmt.Printf("Initialization error: %v\n", err)
return
}
defer func() {
if err := pipeline.Shutdown(ctx); err != nil {
fmt.Printf("Shutdown error: %v\n", err)
}
}()
if err := pipeline.ExecuteTask(ctx, "process-records"); err != nil {
fmt.Printf("Execution error: %v\n", err)
return
}
spans := pipeline.Spans()
fmt.Printf("Successfully recorded %d span(s)\n", len(spans))
for _, span := range spans {
fmt.Printf("Span Name: %s, TraceID: %s, Attributes: %d\n",
span.Name, span.SpanContext.TraceID().String(), len(span.Attributes))
}
}
{
"schemaVersion": 1,
"goal": "verify pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0",
"kind": "HOW",
"packages": [
"pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0"
],
"constraints": {
"executionContext": "node"
},
"runtimeConditions": {
"ecosystem": "npm",
"language": "javascript",
"moduleSystem": "cjs",
"packageManager": "npm@10.9.8",
"runtime": "node@22.23.2"
}
}
package main
import (
"context"
"fmt"
"os"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/sdk/trace/tracetest"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
"go.opentelemetry.io/otel/trace"
)
func main() {
ctx := context.Background()
// Contract 1: tracetest.NewInMemoryExporter records spans in memory for inspection and testing
var exporter *tracetest.InMemoryExporter
{
exporter = tracetest.NewInMemoryExporter()
if exporter == nil {
fmt.Fprintln(os.Stderr, "FAIL: expected non-nil InMemoryExporter from tracetest.NewInMemoryExporter()")
os.Exit(1)
}
if len(exporter.GetSpans()) != 0 {
fmt.Fprintf(os.Stderr, "FAIL: expected initial spans count 0, got %d\n", len(exporter.GetSpans()))
os.Exit(1)
}
}
// Contract 2: sdktrace.WithResource attaches resource attributes to all spans produced by the TracerProvider
var res *resource.Resource
{
var err error
res, err = resource.Merge(
resource.Default(),
resource.NewSchemaless(
semconv.ServiceNameKey.String("contract-test-service"),
attribute.String("custom.environment", "test"),
),
)
if err != nil {
fmt.Fprintf(os.Stderr, "FAIL: resource.Merge returned unexpected error: %v\n", err)
os.Exit(1)
}
if res == nil {
fmt.Fprintln(os.Stderr, "FAIL: expected non-nil Resource")
os.Exit(1)
}
}
// Contract 3: sdktrace.NewTracerProvider creates a configured TracerProvider with span processors and samplers
// Contract 4: sdktrace.WithSyncer registers a span exporter using a SimpleSpanProcessor to export spans synchronously
// Contract 5: sdktrace.WithSampler configures sampling behavior for generated spans
var tp *sdktrace.TracerProvider
{
tp = sdktrace.NewTracerProvider(
sdktrace.WithSyncer(exporter),
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithResource(res),
)
if tp == nil {
fmt.Fprintln(os.Stderr, "FAIL: expected non-nil TracerProvider from sdktrace.NewTracerProvider()")
os.Exit(1)
}
}
// Execute span lifecycle and verify all contracts end-to-end
{
tracer := tp.Tracer("contract-tracer")
if tracer == nil {
fmt.Fprintln(os.Stderr, "FAIL: expected non-nil Tracer from tp.Tracer()")
os.Exit(1)
}
spanCtx, span := tracer.Start(ctx, "contract-span-operation",
trace.WithAttributes(attribute.String("op.key", "op.value")),
)
if span == nil || spanCtx == nil {
fmt.Fprintln(os.Stderr, "FAIL: expected valid span and context from tracer.Start()")
os.Exit(1)
}
if !span.IsRecording() {
fmt.Fprintln(os.Stderr, "FAIL: expected span to be recording with AlwaysSample()")
os.Exit(1)
}
span.AddEvent("contract-event", trace.WithAttributes(attribute.Int("event.code", 200)))
span.End()
// Verify syncer exported the span immediately
spans := exporter.GetSpans()
if len(spans) != 1 {
fmt.Fprintf(os.Stderr, "FAIL: expected 1 exported span, got %d\n", len(spans))
os.Exit(1)
}
exportedSpan := spans[0]
if exportedSpan.Name != "contract-span-operation" {
fmt.Fprintf(os.Stderr, "FAIL: expected span name 'contract-span-operation', got '%s'\n", exportedSpan.Name)
os.Exit(1)
}
// Verify resource attributes on the exported span
var foundServiceName bool
for _, attr := range exportedSpan.Resource.Attributes() {
if attr.Key == semconv.ServiceNameKey && attr.Value.AsString() == "contract-test-service" {
foundServiceName = true
break
}
}
if !foundServiceName {
fmt.Fprintln(os.Stderr, "FAIL: expected resource attribute service.name='contract-test-service' on exported span")
os.Exit(1)
}
// Verify events
if len(exportedSpan.Events) != 1 || exportedSpan.Events[0].Name != "contract-event" {
fmt.Fprintf(os.Stderr, "FAIL: expected 1 event named 'contract-event', got %v\n", exportedSpan.Events)
os.Exit(1)
}
}
// Verify NeverSample behavior with WithSampler
{
neverExporter := tracetest.NewInMemoryExporter()
neverTP := sdktrace.NewTracerProvider(
sdktrace.WithSyncer(neverExporter),
sdktrace.WithSampler(sdktrace.NeverSample()),
)
neverTracer := neverTP.Tracer("never-sampler-tracer")
_, nonSampledSpan := neverTracer.Start(ctx, "unsampled-span")
if nonSampledSpan.SpanContext().IsSampled() {
fmt.Fprintln(os.Stderr, "FAIL: expected span to not be sampled under NeverSample()")
os.Exit(1)
}
nonSampledSpan.End()
if len(neverExporter.GetSpans()) != 0 {
fmt.Fprintf(os.Stderr, "FAIL: expected 0 spans exported under NeverSample(), got %d\n", len(neverExporter.GetSpans()))
os.Exit(1)
}
if err := neverTP.Shutdown(ctx); err != nil {
fmt.Fprintf(os.Stderr, "FAIL: neverTP.Shutdown failed: %v\n", err)
os.Exit(1)
}
}
// Shutdown pipeline
if err := tp.Shutdown(ctx); err != nil {
fmt.Fprintf(os.Stderr, "FAIL: tp.Shutdown failed: %v\n", err)
os.Exit(1)
}
fmt.Println("PASS: pkg:golang/go.opentelemetry.io/otel/sdk@v1.43.0 contract verified")
}
原始种子者
匿名