README

go-sdk

Expand ▾ Collapse ▴

Documentation

Index

Constants

const (
	DevEnv     = "dev"
	StgEnv     = "stg"
	PrdEnv     = "prd"
	DefaultEnv = DevEnv
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AppFlagSet

type AppFlagSet struct {
	*flag.FlagSet
}

func (*AppFlagSet) GetSampleEnvs

func (f *AppFlagSet) GetSampleEnvs()

func (*AppFlagSet) Parse

func (f *AppFlagSet) Parse(args []string)

func (*AppFlagSet) ShowTable

func (f *AppFlagSet) ShowTable(data [][]string)

type Function

type Function func(ServiceContext) error

A kind of server job

type HasPrefix

type HasPrefix interface {
	GetPrefix() string
	Get() interface{}
}

type HttpServer

type HttpServer interface {
	Runnable
	// Add handlers to GIN
	AddHandler(HttpServerHandler)
	// Return server config
	//GetConfig() http_server.Config
	// URI that the server is listening
	URI() string

	AddMiddleware(gin.HandlerFunc)

	Routes() []gin.RouteInfo
}

GIN HTTP server for REST API

type HttpServerHandler

type HttpServerHandler = func(*gin.Engine)

HTTP Server Handler for register some routes and gin handlers

type Option

type Option func(*service)

Convenience option method for creating/initializing a service

func WithFileLogger

func WithFileLogger() Option

Service will write log data to file with this option

func WithInitConfig

func WithInitConfig(r PrefixConfigure) Option

Add init component to SDK, example elasticsearch, .... that is third party service These components will init config for service from flag and return service in plugin Behind, it can init config, example get key jwt, key env

func WithInitRunnable

func WithInitRunnable(r PrefixRunnable) Option

Add init component to SDK These components will run sequentially before service run

func WithName

func WithName(name string) Option

Service must have a name for service discovery and logging/monitoring

func WithRunnable

func WithRunnable(r Runnable) Option

Add Runnable component to SDK These components will run parallel in when service run

func WithVersion

func WithVersion(version string) Option

Every deployment needs a specific version

type PrefixConfigure

type PrefixConfigure interface {
	InitFlags()
	HasPrefix
}

Config init flag for other config without init service Example set jwt key,... Service Provider for service thirth party Example: Telegram bot, elasticsearch, prdiction IO,...

type PrefixRunnable

type PrefixRunnable interface {
	HasPrefix
	Runnable
}

type Runnable

type Runnable interface {
	Name() string
	InitFlags()
	Configure() error
	Run() error
	Stop() <-chan bool
}

Runnable is an abstract object in SDK Almost components are Runnable. SDK will manage their lifecycle InitFlags -> Configure -> Run -> Stop

type Service

type Service interface {
	// A part of Service, it's passed to all handlers/functions
	ServiceContext
	// Name of the service
	Name() string
	// Version of the service
	Version() string
	// Gin HTTP Server wrapper
	HTTPServer() HttpServer
	// Init with options, they can be db connections or
	// anything the service need handle before starting
	Init() error
	// This method returns service if it is registered on discovery
	IsRegistered() bool
	// Start service and its all component.
	// It will be stopped if any service return error
	Start() error
	// Stop service and its all component.
	Stop()
	// Method export all flags to std/terminal
	// We might use: "> .env" to move its content .env file
	OutEnv()

	//Router table
	RouteTable()

	SetHttpServer(has bool) Service

	Create() Service
}

The heart of SDK, Service represents for a real micro service with its all components

func New

func New(opts ...Option) Service

type ServiceContext

type ServiceContext interface {
	// Logger for a specific service, usually it has a prefix to distinguish
	// with each others
	Logger(prefix string) logger.Logger
	// Get component with prefix
	Get(prefix string) (interface{}, bool)
	MustGet(prefix string) interface{}
	Env() string
}

Service Context: A wrapper for all things needed for developing a service

type Storage

type Storage interface {
	Get(prefix string) (interface{}, bool)
	MustGet(prefix string) interface{}
}

The storage store all db connection in service