CodeSampleX

示例

go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0: Option

已验证示例 — golang go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0: Option. contract 在 go 1.26 · linux debian/x64 · docker 上运行并通过.

sha256:48d467f5ebc19954be3598fac4c4bc43286bc84ac946ead3d7173b309cdc416d

本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。 提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。 MIT-0

执行证据

声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。

证据依据
签名契约通过
验证回执
1
构建过它的签名密钥
1
声明的环境 go 1.26 linux 24 · ubuntu · glibc 2.39 x64 go 1.26 go go 1

验证运行环境

环境 契约 阶段 运行日期
go 1.26 · linux debian/x64 · docker ed25519:c1973797be207ac4 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · golang@1golang:1.26@sha256:e30143be198a…
2026-09-07

案例

HOW
目标
verify stdouttrace.Option in pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0
包
符号
  • stdouttrace.Option
环境
go 1.26.6
创建时间
2026-09-07T03:59:51Z

契约

  1. stdouttrace.New accepts Option functional options to configure trace export behavior
  2. stdouttrace.WithWriter directs exported JSON spans to a custom io.Writer buffer
  3. stdouttrace.WithPrettyPrint formats output JSON with multi-line indentation
  4. stdouttrace.WithoutTimestamps zeroes StartTime and EndTime timestamps in exported span records

文件

  • PROMPT.md
  • csx.json
  • go.mod
  • go.sum
  • sample.go
  • spec.json
  • test/main.go

下载源代码构件 (tar.gz)

源代码

PROMPT.md
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 stdouttrace.Option in pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0
Demonstrate these symbols/APIs:
  - stdouttrace.Option

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.
csx.json
{"case":{"caseId":"case:sha256:b9819258539e1a317494e6a5e085f528c2fab35e6b391263a643828afcc4b652","contract":["stdouttrace.New accepts Option functional options to configure trace export behavior","stdouttrace.WithWriter directs exported JSON spans to a custom io.Writer buffer","stdouttrace.WithPrettyPrint formats output JSON with multi-line indentation","stdouttrace.WithoutTimestamps zeroes StartTime and EndTime timestamps in exported span records"],"goal":"verify stdouttrace.Option in pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0","kind":"HOW","packages":["pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0"],"schemaVersion":1,"symbols":["stdouttrace.Option"]},"contractCommand":["go","run","./test"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"golang","language":"go","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"go","packageManagerVersion":"1.26.6","runtime":"go","runtimeVersion":"1.26.6","schemaVersion":1},"license":"MIT-0","packages":["pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0"],"schemaVersion":1,"subject":"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0","symbols":["stdouttrace.Option"],"verifierAdapter":"golang@1"}
go.mod
module example.com/sample

go 1.26.6

require (
	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0
	go.opentelemetry.io/otel/sdk 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 v1.43.0 // indirect
	go.opentelemetry.io/otel/metric v1.43.0 // indirect
	go.opentelemetry.io/otel/trace v1.43.0 // indirect
	golang.org/x/sys v0.42.0 // indirect
)
go.sum
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/exporters/stdout/stdouttrace v1.43.0 h1:mS47AX77OtFfKG4vtp+84kuGSFZHTyxtXIN269vChY0=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.43.0/go.mod h1:PJnsC41lAGncJlPUniSwM81gc80GkgWJWr3cu2nKEtU=
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=
sample.go
package sample

import (
	"context"
	"fmt"
	"io"

	"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

// NewExporter creates an OpenTelemetry stdouttrace exporter configured with the provided Option functional options.
func NewExporter(options ...stdouttrace.Option) (*stdouttrace.Exporter, error) {
	return stdouttrace.New(options...)
}

// NewConfiguredExporter creates a stdouttrace exporter with explicit configuration options:
// target writer, pretty printing, and timestamp suppression.
func NewConfiguredExporter(w io.Writer, pretty bool, withoutTimestamps bool) (*stdouttrace.Exporter, error) {
	var opts []stdouttrace.Option
	if w != nil {
		opts = append(opts, stdouttrace.WithWriter(w))
	}
	if pretty {
		opts = append(opts, stdouttrace.WithPrettyPrint())
	}
	if withoutTimestamps {
		opts = append(opts, stdouttrace.WithoutTimestamps())
	}
	return stdouttrace.New(opts...)
}

// ExportSpans exports spans using the provided stdouttrace exporter.
func ExportSpans(ctx context.Context, exp *stdouttrace.Exporter, spans []sdktrace.ReadOnlySpan) error {
	if exp == nil {
		return fmt.Errorf("exporter cannot be nil")
	}
	return exp.ExportSpans(ctx, spans)
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify stdouttrace.Option in pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0",
  "kind": "HOW",
  "packages": [
    "pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.43.0"
  ],
  "symbols": [
    "stdouttrace.Option"
  ]
}
test/main.go
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"os"
	"strings"

	"example.com/sample"
	"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
	sdktrace "go.opentelemetry.io/otel/sdk/trace"
)

func runTrace(exp *stdouttrace.Exporter, spanName string) error {
	ctx := context.Background()
	tp := sdktrace.NewTracerProvider(sdktrace.WithSyncer(exp))
	defer func() {
		_ = tp.Shutdown(ctx)
	}()

	tracer := tp.Tracer("contract-tracer")
	_, span := tracer.Start(ctx, spanName)
	span.End()

	return tp.ForceFlush(ctx)
}

func main() {
	ctx := context.Background()

	// 1. stdouttrace.WithWriter directs output to custom io.Writer buffer
	var bufWriter bytes.Buffer
	exp1, err := sample.NewExporter(stdouttrace.WithWriter(&bufWriter))
	if err != nil {
		fmt.Fprintf(os.Stderr, "stdouttrace.New with WithWriter failed: %v\n", err)
		os.Exit(1)
	}
	if err := runTrace(exp1, "contract-span"); err != nil {
		fmt.Fprintf(os.Stderr, "runTrace exp1 failed: %v\n", err)
		os.Exit(1)
	}
	output1 := bufWriter.String()
	if !strings.Contains(output1, "contract-span") {
		fmt.Fprintf(os.Stderr, "expected output to contain 'contract-span', got: %s\n", output1)
		os.Exit(1)
	}
	lines1 := strings.Split(strings.TrimSpace(output1), "\n")
	if len(lines1) != 1 {
		fmt.Fprintf(os.Stderr, "expected compact single line JSON, got %d lines: %s\n", len(lines1), output1)
		os.Exit(1)
	}

	// 2. stdouttrace.WithPrettyPrint formats output JSON with multi-line indentation
	var bufPretty bytes.Buffer
	exp2, err := sample.NewExporter(
		stdouttrace.WithWriter(&bufPretty),
		stdouttrace.WithPrettyPrint(),
	)
	if err != nil {
		fmt.Fprintf(os.Stderr, "stdouttrace.New with WithPrettyPrint failed: %v\n", err)
		os.Exit(1)
	}
	if err := runTrace(exp2, "contract-span"); err != nil {
		fmt.Fprintf(os.Stderr, "runTrace exp2 failed: %v\n", err)
		os.Exit(1)
	}
	output2 := bufPretty.String()
	lines2 := strings.Split(strings.TrimSpace(output2), "\n")
	if len(lines2) <= 1 {
		fmt.Fprintf(os.Stderr, "expected multi-line pretty printed JSON, got: %s\n", output2)
		os.Exit(1)
	}

	// 3. stdouttrace.WithoutTimestamps zeroes timestamp fields in exported JSON
	var bufNoTimestamps bytes.Buffer
	exp3, err := sample.NewExporter(
		stdouttrace.WithWriter(&bufNoTimestamps),
		stdouttrace.WithoutTimestamps(),
	)
	if err != nil {
		fmt.Fprintf(os.Stderr, "stdouttrace.New with WithoutTimestamps failed: %v\n", err)
		os.Exit(1)
	}
	if err := runTrace(exp3, "contract-span"); err != nil {
		fmt.Fprintf(os.Stderr, "runTrace exp3 failed: %v\n", err)
		os.Exit(1)
	}
	output3 := bufNoTimestamps.String()

	var dataWithTimestamps map[string]any
	if err := json.Unmarshal([]byte(output1), &dataWithTimestamps); err != nil {
		fmt.Fprintf(os.Stderr, "failed to parse output1 as JSON: %v\n", err)
		os.Exit(1)
	}

	var dataWithoutTimestamps map[string]any
	if err := json.Unmarshal([]byte(output3), &dataWithoutTimestamps); err != nil {
		fmt.Fprintf(os.Stderr, "failed to parse output3 as JSON: %v\n", err)
		os.Exit(1)
	}

	startTimeWith, ok1 := dataWithTimestamps["StartTime"].(string)
	if !ok1 || startTimeWith == "" || startTimeWith == "0001-01-01T00:00:00Z" {
		fmt.Fprintf(os.Stderr, "expected valid non-zero StartTime in standard output, got: %v\n", dataWithTimestamps["StartTime"])
		os.Exit(1)
	}
	startTimeWithout, ok2 := dataWithoutTimestamps["StartTime"].(string)
	if !ok2 || startTimeWithout != "0001-01-01T00:00:00Z" {
		fmt.Fprintf(os.Stderr, "expected zero StartTime in WithoutTimestamps output, got: %v\n", dataWithoutTimestamps["StartTime"])
		os.Exit(1)
	}

	// 4. Combined Option functional options
	var bufCombined bytes.Buffer
	exp4, err := sample.NewConfiguredExporter(&bufCombined, true, true)
	if err != nil {
		fmt.Fprintf(os.Stderr, "NewConfiguredExporter failed: %v\n", err)
		os.Exit(1)
	}
	if err := runTrace(exp4, "contract-span"); err != nil {
		fmt.Fprintf(os.Stderr, "runTrace exp4 failed: %v\n", err)
		os.Exit(1)
	}
	output4 := bufCombined.String()
	if !strings.Contains(output4, "contract-span") {
		fmt.Fprintf(os.Stderr, "expected output4 to contain 'contract-span', got: %s\n", output4)
		os.Exit(1)
	}
	lines4 := strings.Split(strings.TrimSpace(output4), "\n")
	if len(lines4) <= 1 {
		fmt.Fprintf(os.Stderr, "expected multi-line pretty printed JSON in combined exporter, got: %s\n", output4)
		os.Exit(1)
	}

	// 5. Verify exporter Shutdown
	for i, exp := range []*stdouttrace.Exporter{exp1, exp2, exp3, exp4} {
		if err := exp.Shutdown(ctx); err != nil {
			fmt.Fprintf(os.Stderr, "exp[%d].Shutdown failed: %v\n", i+1, err)
			os.Exit(1)
		}
	}

	fmt.Println("Contract test passed successfully.")
}

原始种子者

匿名