샘플
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
검증된 샘플 — golang github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5. go 1.26 · linux debian/x64 · docker에서 contract를 실행해 통과했습니다.
sha256:3ac654c2c5672bf4c1c64f4483d0ac07af2fe6ac91f750573bd30ccd541819cb
이 네트워크가 제공하는 것은 하나입니다. 빌드되는 샘플. 샌드박스에서 돌리고 서명된 영수증을 보관합니다. 등급을 매기지 않고 무엇도 보증하지 않습니다 — 같은 코드가 당신 환경에서 빌드되는지는 측정한 적이 없습니다.
통과한 계약 영수증을 낸 서로 다른 서명 키의 수입니다. 하나면 작성자 혼자이고, 둘 이상이면 다른 사람도 빌드했다는 뜻입니다. 키는 스스로 만드는 것이고 뒤에 등록된 신원이 없으므로, 세는 것은 사람이 아니라 키입니다.
MIT-0
실행 증거
선언된 환경과 서명된 실행을 분리해 두었습니다. 이 샘플이 무엇을 어디서 실행했는지 그대로 볼 수 있습니다.
- 증거 기준
- 서명된 컨트랙트 통과
- 검증 영수증
- 1
- 빌드한 서명 키
- 1
선언된 환경
linux 24 · ubuntu · glibc 2.39 x64 go
검증 실행 환경
| 환경 | 컨트랙트 | 단계 | 실행일 |
|---|---|---|---|
| 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-10-24 |
케이스
HOW- 목표
- verify pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5
- 생성일
- 2026-10-24T10:09:38Z
컨트랙트
- zipkinot.Wrap wraps a zipkin.Tracer into an opentracing.Tracer that starts and finishes spans recorded by the underlying reporter
- tracer.Inject and tracer.Extract round-trip SpanContext over opentracing.HTTPHeaders using standard B3 headers so opentracing.ChildOf links child and parent spans with matching TraceID and ParentID
- zipkinot.WithB3InjectOption(zipkinot.B3InjectSingle) injects trace state into the single 'b3' HTTP header without setting multi-header X-B3-TraceId
- tracer.Inject and tracer.Extract with zipkinot.Delegator round-trip model.SpanContext through a zipkinot.DelegatingCarrier implementation
파일
- PROMPT.md
- csx.json
- go.mod
- go.sum
- 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/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5
Kind: HOW
Use EXACTLY these public packages and versions:
- pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5
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:76e6885e49ccd3feb8432abca3a834c774bf144be9a7e12a5b08a291869ed442","contract":["zipkinot.Wrap wraps a zipkin.Tracer into an opentracing.Tracer that starts and finishes spans recorded by the underlying reporter","tracer.Inject and tracer.Extract round-trip SpanContext over opentracing.HTTPHeaders using standard B3 headers so opentracing.ChildOf links child and parent spans with matching TraceID and ParentID","zipkinot.WithB3InjectOption(zipkinot.B3InjectSingle) injects trace state into the single 'b3' HTTP header without setting multi-header X-B3-TraceId","tracer.Inject and tracer.Extract with zipkinot.Delegator round-trip model.SpanContext through a zipkinot.DelegatingCarrier implementation"],"goal":"verify pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5","kind":"HOW","packages":["pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5"],"schemaVersion":1},"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/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5"],"schemaVersion":1,"subject":"pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5","verifierAdapter":"golang@1"}
module sample
go 1.26.6
require (
github.com/opentracing/opentracing-go v1.1.0
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
github.com/openzipkin/zipkin-go v0.2.1
)
require (
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect
google.golang.org/grpc v1.22.1 // indirect
)
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU=
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
github.com/openzipkin/zipkin-go v0.2.1 h1:noL5/5Uf1HpVl3wNsfkZhIKbSWCVi5jgqkONNx8PXcA=
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
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/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.22.1 h1:/7cs52RnTJmD43s3uxzlq2U7nqVTd/37viQwMrMNlOM=
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
{
"schemaVersion": 1,
"goal": "verify pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5",
"kind": "HOW",
"packages": [
"pkg:golang/github.com/openzipkin-contrib/zipkin-go-opentracing@v0.4.5"
]
}
package main
import (
"fmt"
"net/http"
"os"
opentracing "github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext"
zipkinot "github.com/openzipkin-contrib/zipkin-go-opentracing"
"github.com/openzipkin/zipkin-go"
"github.com/openzipkin/zipkin-go/model"
"github.com/openzipkin/zipkin-go/reporter/recorder"
)
type memoryCarrier struct {
state model.SpanContext
}
func (m *memoryCarrier) State() (model.SpanContext, error) {
return m.state, nil
}
func (m *memoryCarrier) SetState(sc model.SpanContext) error {
m.state = sc
return nil
}
func main() {
rep := recorder.NewReporter()
defer rep.Close()
endpoint, err := zipkin.NewEndpoint("sample-service", "127.0.0.1:8080")
if err != nil {
fmt.Fprintf(os.Stderr, "NewEndpoint failed: %v\n", err)
os.Exit(1)
}
nativeTracer, err := zipkin.NewTracer(rep, zipkin.WithLocalEndpoint(endpoint))
if err != nil {
fmt.Fprintf(os.Stderr, "NewTracer failed: %v\n", err)
os.Exit(1)
}
tracer := zipkinot.Wrap(nativeTracer, zipkinot.WithB3InjectOption(zipkinot.B3InjectStandard))
parentSpan := tracer.StartSpan("initial-op", ext.SpanKindRPCClient)
parentSpan.SetTag("custom.tag", "value1")
parentSpan.SetOperationName("parent-op")
headers := http.Header{}
carrier := opentracing.HTTPHeadersCarrier(headers)
if err := tracer.Inject(parentSpan.Context(), opentracing.HTTPHeaders, carrier); err != nil {
fmt.Fprintf(os.Stderr, "Inject failed: %v\n", err)
os.Exit(1)
}
if headers.Get("X-B3-TraceId") == "" || headers.Get("X-B3-SpanId") == "" {
fmt.Fprintf(os.Stderr, "expected standard B3 headers to be set\n")
os.Exit(1)
}
extractedCtx, err := tracer.Extract(opentracing.HTTPHeaders, carrier)
if err != nil {
fmt.Fprintf(os.Stderr, "Extract failed: %v\n", err)
os.Exit(1)
}
childSpan := tracer.StartSpan("child-op", opentracing.ChildOf(extractedCtx))
childSpan.Finish()
parentSpan.Finish()
spans := rep.Flush()
if len(spans) != 2 {
fmt.Fprintf(os.Stderr, "expected 2 recorded spans, got %d\n", len(spans))
os.Exit(1)
}
if spans[0].TraceID != spans[1].TraceID {
fmt.Fprintf(os.Stderr, "expected matching TraceID across child (%s) and parent (%s)\n", spans[0].TraceID, spans[1].TraceID)
os.Exit(1)
}
if spans[0].ParentID == nil || *spans[0].ParentID != spans[1].ID {
fmt.Fprintf(os.Stderr, "expected child ParentID to match parent ID\n")
os.Exit(1)
}
if spans[1].Name != "parent-op" || spans[1].Kind != model.Client || spans[1].Tags["custom.tag"] != "value1" {
fmt.Fprintf(os.Stderr, "unexpected parent span model: %+v\n", spans[1])
os.Exit(1)
}
singleTracer := zipkinot.Wrap(nativeTracer, zipkinot.WithB3InjectOption(zipkinot.B3InjectSingle))
singleHeaders := http.Header{}
if err := singleTracer.Inject(parentSpan.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(singleHeaders)); err != nil {
fmt.Fprintf(os.Stderr, "single header Inject failed: %v\n", err)
os.Exit(1)
}
if singleHeaders.Get("b3") == "" || singleHeaders.Get("X-B3-TraceId") != "" {
fmt.Fprintf(os.Stderr, "expected only single B3 header to be set\n")
os.Exit(1)
}
delCarrier := &memoryCarrier{}
if err := tracer.Inject(parentSpan.Context(), zipkinot.Delegator, delCarrier); err != nil {
fmt.Fprintf(os.Stderr, "Delegator Inject failed: %v\n", err)
os.Exit(1)
}
delCtx, err := tracer.Extract(zipkinot.Delegator, delCarrier)
if err != nil {
fmt.Fprintf(os.Stderr, "Delegator Extract failed: %v\n", err)
os.Exit(1)
}
zsc, ok := delCtx.(zipkinot.SpanContext)
if !ok || zsc.TraceID != spans[1].TraceID || zsc.ID != spans[1].ID {
fmt.Fprintf(os.Stderr, "Delegator roundtrip mismatch\n")
os.Exit(1)
}
}
오리진 시더
익명