trpc.group/trpc-go/trpc-go@v1.0.3/rpcz/id_generator.go (about)

     1  //
     2  //
     3  // Tencent is pleased to support the open source community by making tRPC available.
     4  //
     5  // Copyright (C) 2023 THL A29 Limited, a Tencent company.
     6  // All rights reserved.
     7  //
     8  // If you have downloaded a copy of the tRPC source code from Tencent,
     9  // please note that tRPC source code is licensed under the  Apache 2.0 License,
    10  // A copy of the Apache 2.0 License is included in this file.
    11  //
    12  //
    13  
    14  package rpcz
    15  
    16  import (
    17  	"math/rand"
    18  	"sync"
    19  )
    20  
    21  // randomIDGenerator generates random span ID.
    22  type randomIDGenerator struct {
    23  	sync.Mutex
    24  	randSource *rand.Rand
    25  }
    26  
    27  // newSpanID returns a non-negative span ID randomly.
    28  func (gen *randomIDGenerator) newSpanID() SpanID {
    29  	gen.Lock()
    30  	defer gen.Unlock()
    31  	return SpanID(gen.randSource.Int63())
    32  }
    33  
    34  func newRandomIDGenerator(seed int64) *randomIDGenerator {
    35  	return &randomIDGenerator{randSource: rand.New(rand.NewSource(seed))}
    36  }