Documentation ¶
Overview ¶
Package voyeur implements a concurrency-safe value that can be watched for changes.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Value ¶
type Value struct {
// contains filtered or unexported fields
}
Value represents a shared value that can be watched for changes. Methods on a Value may be called concurrently. The zero Value is ok to use, and is equivalent to a NewValue result with a nil initial value.
func NewValue ¶
func NewValue(initial interface{}) *Value
NewValue creates a new Value holding the given initial value. If initial is nil, any watchers will wait until a value is set.
func (*Value) Close ¶
Close closes the Value, unblocking any outstanding watchers. Close always returns nil.
type Watcher ¶
type Watcher struct {
// contains filtered or unexported fields
}
Watcher represents a single watcher of a shared value.
func (*Watcher) Close ¶
func (w *Watcher) Close()
Close closes the Watcher without closing the underlying value. It may be called concurrently with Next.
func (*Watcher) Next ¶
Next blocks until there is a new value to be retrieved from the value that is being watched. It also unblocks when the value or the Watcher itself is closed. Next returns false if the value or the Watcher itself have been closed.
Example ¶
v := NewValue(nil) // The channel is not necessary for normal use of the watcher. // It just makes the test output predictable. ch := make(chan bool) go func() { for x := 0; x < 3; x++ { v.Set(fmt.Sprintf("value%d", x)) ch <- true } v.Close() }() w := v.Watch() for w.Next() { fmt.Println(w.Value()) <-ch }
Output: value0 value1 value2