31 lines
535 B
Go
31 lines
535 B
Go
|
package slack
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
// IDGenerator provides an interface for generating integer ID values.
|
||
|
type IDGenerator interface {
|
||
|
Next() int
|
||
|
}
|
||
|
|
||
|
// NewSafeID returns a new instance of an IDGenerator which is safe for
|
||
|
// concurrent use by multiple goroutines.
|
||
|
func NewSafeID(startID int) IDGenerator {
|
||
|
return &safeID{
|
||
|
nextID: startID,
|
||
|
mutex: &sync.Mutex{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type safeID struct {
|
||
|
nextID int
|
||
|
mutex *sync.Mutex
|
||
|
}
|
||
|
|
||
|
func (s *safeID) Next() int {
|
||
|
s.mutex.Lock()
|
||
|
defer s.mutex.Unlock()
|
||
|
id := s.nextID
|
||
|
s.nextID++
|
||
|
return id
|
||
|
}
|