Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Service ¶
type Service interface {
// Start the service.
Start() error
// Stop the Service.
// Invariants: Usually after this call the Service cannot be started
// again, you need to build a new Service to do so.
Close() error
health.Checkable
}
Service represents a long running service inside the Application.
Typically a Service will leverage utils.StartStopOnce to implement these calls in a safe manner.
Template ¶
Mockable Foo service with a run loop
//go:generate mockery --name Foo --output ../../internal/mocks/ --case=underscore
type (
// Expose a public interface so we can mock the service.
Foo interface {
service.Service
// ...
}
foo struct {
// ...
stop chan struct{}
done chan struct{}
utils.StartStopOnce
}
)
var _ Foo = (*foo)(nil)
func NewFoo() Foo {
f := &foo{
// ...
}
return f
}
func (f *foo) Start() error {
return f.StartOnce("Foo", func() error {
go f.run()
return nil
})
}
func (f *foo) Close() error {
return f.StopOnce("Foo", func() error {
// trigger goroutine cleanup
close(f.stop)
// wait for cleanup to complete
<-f.done
return nil
})
}
func (f *foo) run() {
// signal cleanup completion
defer close(f.done)
for {
select {
// ...
case <-f.stop:
// stop the routine
return
}
}
}
Click to show internal directories.
Click to hide internal directories.