app

package
v1.60.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2025 License: MIT Imports: 4 Imported by: 1

README

Package app

Пакет app предназначен для создания приложений с простым и гибким управлением жизненным циклом.

Types

Application

Структура Application представляет собой абстракцию, которая содержит в себе основные необходимые компоненты приложения (logger, config, context), а также позволяет простым и гибким способом управлять жизненным циклом компонент приложения реализующих интерфейсы Runner и Closer.

Methods:

(a *Application) Context() context.Context

Получить контекст приложения.

(a *Application) Config() *config.Config

Получить конфигурацию приложения.

(a *Application) Logger() *log.Adapter

Получить логгер.

(a *Application) AddRunners(runners ...Runner)

Добавить компоненты приложения, реализующих интерфейс Runner.

(a *Application) AddClosers(closers ...Closer)

Добавить компоненты приложения, реализующих интерфейс Closer.

(a *Application) Run() error

Вызывает у каждой Runner компоненты приложения метод Run. Блокирующая операция. Если хотя бы одна компонента при запуске вернула ошибку, то метод Run завершается с ошибкой.

(a *Application) Close()

Вызывает у каждой Closer компоненты приложения метод Close.

(a *Application) Shutdown()

То же самое, что и метод Close, но в конце дополнительно завершает контекст.

Usage

Default usage flow
package main

import (
	"context"
	"log"

	"github.com/txix-open/isp-kit/app"
	"github.com/txix-open/isp-kit/shutdown"
)

func noopRunnerFn(_ context.Context) error { return nil }

func noopCloserFn() error { return nil }

type noopRunner struct{}

func (r noopRunner) Run(_ context.Context) error { return nil }

type noopCloser struct{}

func (c noopCloser) Close() error { return nil }

func main() {
	application, err := app.New()
	if err != nil {
		log.Fatal(err)
	}
	application.AddRunners(app.RunnerFunc(noopRunnerFn), noopRunner{})
	application.AddClosers(app.CloserFunc(noopCloserFn), noopCloser{})

	shutdown.On(func() { /* waiting for SIGINT & SIGTERM signals */
		log.Println("shutting down...")
		application.Shutdown()
		log.Println("shutdown completed")
	})

	err = application.Run() /* blocking here */
	if err != nil {
		log.Fatal(err)
	}
}

Construct Application instance with options
package main

import (
	"log"

	"github.com/txix-open/isp-kit/app"
	"github.com/txix-open/isp-kit/config"
	log2 "github.com/txix-open/isp-kit/log"
	"github.com/txix-open/isp-kit/validator"
)

func main() {
	application, err := app.New(
		app.WithConfigOptions(
			config.WithValidator(validator.Default),
			/* pass the config options you want */
		),
		app.WithLoggerConfigSupplier(func(cfg *config.Config) log2.Config {
			var loggerCfg log2.Config
			/* form the logger config the way you want */
			return loggerCfg
		}),
	)
	if err != nil {
		log.Fatal(err)
	}
	...
}

Construct Application instance with config
package main

import (
	"log"

	"github.com/txix-open/isp-kit/app"
	"github.com/txix-open/isp-kit/config"
	"github.com/txix-open/isp-kit/validator"
)

func main() {
	config := app.Config{
		ConfigOptions: []config.Option{
			config.WithValidator(validator.Default),
			/* pass the config options you want */
		},
	}
	application, err := app.NewFromConfig(config)
	if err != nil {
		log.Fatal(err)
	}
	...
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Application

type Application struct {
	// contains filtered or unexported fields
}

nolint:containedctx

func New

func New(opts ...Option) (*Application, error)

func NewFromConfig

func NewFromConfig(appConfig Config) (*Application, error)

func (*Application) AddClosers

func (a *Application) AddClosers(closers ...Closer)

func (*Application) AddRunners

func (a *Application) AddRunners(runners ...Runner)

func (*Application) Close

func (a *Application) Close()

func (*Application) Config

func (a *Application) Config() *config.Config

func (*Application) Context

func (a *Application) Context() context.Context

func (*Application) Logger

func (a *Application) Logger() *log.Adapter

func (*Application) Run

func (a *Application) Run() error

func (*Application) Shutdown

func (a *Application) Shutdown()

type Closer

type Closer interface {
	Close() error
}

type CloserFunc

type CloserFunc func() error

func (CloserFunc) Close

func (c CloserFunc) Close() error

type Config

type Config struct {
	LoggerConfigSupplier LoggerConfigSupplier
	ConfigOptions        []config.Option
}

func DefaultConfig

func DefaultConfig() *Config

type LoggerConfigSupplier

type LoggerConfigSupplier func(cfg *config.Config) log.Config

type Option

type Option func(c *Config)

func WithConfigOptions

func WithConfigOptions(opts ...config.Option) Option

func WithLoggerConfigSupplier

func WithLoggerConfigSupplier(supplier LoggerConfigSupplier) Option

type Runner

type Runner interface {
	Run(ctx context.Context) error
}

type RunnerFunc

type RunnerFunc func(ctx context.Context) error

func (RunnerFunc) Run

func (r RunnerFunc) Run(ctx context.Context) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL