Source File
lifecycle.go
Belonging Package
go.uber.org/fx
// Copyright (c) 2022 Uber Technologies, Inc.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to deal// in the Software without restriction, including without limitation the rights// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell// copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// The above copyright notice and this permission notice shall be included in// all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN// THE SOFTWARE.package fximport ()// A HookFunc is a function that can be used as a [Hook].type HookFunc interface {~func() | ~func() error | ~func(context.Context) | ~func(context.Context) error}// Lifecycle allows constructors to register callbacks that are executed on// application start and stop. See the documentation for App for details on Fx// applications' initialization, startup, and shutdown logic.type Lifecycle interface {Append(Hook)}// A Hook is a pair of start and stop callbacks, either of which can be nil.// If a Hook's OnStart callback isn't executed (because a previous OnStart// failure short-circuited application startup), its OnStop callback won't be// executed.type Hook struct {OnStart func(context.Context) errorOnStop func(context.Context) erroronStartName stringonStopName string}// StartHook returns a new Hook with start as its [Hook.OnStart] function,// wrapping its signature as needed. For example, given the following function://// func myfunc() {// fmt.Println("hook called")// }//// then calling://// lifecycle.Append(StartHook(myfunc))//// is functionally equivalent to calling://// lifecycle.Append(fx.Hook{// OnStart: func(context.Context) error {// myfunc()// return nil// },// })//// The same is true for all functions that satisfy the HookFunc constraint.// Note that any context.Context parameter or error return will be propagated// as expected. If propagation is not intended, users should instead provide a// closure that discards the undesired value(s), or construct a Hook directly.func [ HookFunc]( ) Hook {, := lifecycle.Wrap()return Hook{OnStart: ,onStartName: ,}}// StopHook returns a new Hook with stop as its [Hook.OnStop] function,// wrapping its signature as needed. For example, given the following function://// func myfunc() {// fmt.Println("hook called")// }//// then calling://// lifecycle.Append(StopHook(myfunc))//// is functionally equivalent to calling://// lifecycle.Append(fx.Hook{// OnStop: func(context.Context) error {// myfunc()// return nil// },// })//// The same is true for all functions that satisfy the HookFunc constraint.// Note that any context.Context parameter or error return will be propagated// as expected. If propagation is not intended, users should instead provide a// closure that discards the undesired value(s), or construct a Hook directly.func [ HookFunc]( ) Hook {, := lifecycle.Wrap()return Hook{OnStop: ,onStopName: ,}}// StartStopHook returns a new Hook with start as its [Hook.OnStart] function// and stop as its [Hook.OnStop] function, independently wrapping the signature// of each as needed.func [ HookFunc, HookFunc]( , ) Hook {var (, = lifecycle.Wrap(), = lifecycle.Wrap())return Hook{OnStart: ,OnStop: ,onStartName: ,onStopName: ,}}type lifecycleWrapper struct {*lifecycle.Lifecycle}func ( *lifecycleWrapper) ( Hook) {.Lifecycle.Append(lifecycle.Hook{OnStart: .OnStart,OnStop: .OnStop,OnStartName: .onStartName,OnStopName: .onStopName,})}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |