Help us shape the future of Go! Take the 2026 Go Developer Survey

config

package
v0.9.82 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TagNameEnvVarName   = "env"
	TagNameDefaultValue = "default"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Auth

type Auth struct {
	RateLimiter            AuthRateLimiter
	TokenUpdaterInterval   time.Duration `env:"AUTH_TOKEN_UPDATER_INTERVAL"    default:"5m" v:"gt=0"`
	SessionCleanupInterval time.Duration `env:"AUTH_SESSION_CLEANUP_INTERVAL"  default:"1h" v:"gt=0"`
	MinPasswordEntropyBits int           `env:"AUTH_MIN_PASSWORD_ENTROPY_BITS" default:"50"`
	Cache                  struct {
		Repository struct {
			Secrets time.Duration `env:"AUTH_CACHE_REPOSITORY_SECRETS" default:"1m"`
		}
	}
	JWT struct {
		InitialSecrets  []string      `env:"AUTH_JWT_SECRETS"               default:"0128899,9988210"`
		AccessTokenTTL  time.Duration `env:"AUTH_JWT_ACCESS_TOKEN_TTL"      default:"15m" v:"gt=0"`
		RefreshTokenTTL time.Duration `env:"AUTH_JWT_REFRESH_TOKEN_TTL"     default:"168h" v:"gt=0"`
		Issuer          string        `env:"AUTH_JWT_ISSUER"                default:"go42"`
		Audience        []string      `env:"AUTH_JWT_AUDIENCE"              default:"go42"`
	}
}

type AuthRateLimiter added in v0.9.79

type AuthRateLimiter struct {
	Enabled                bool          `env:"AUTH_RATE_LIMITER_ENABLED"                  default:"false"`
	LoginAccountRequests   int           `env:"AUTH_RATE_LIMITER_LOGIN_ACCOUNT_REQUESTS"   default:"5"     v:"gt=0"`
	LoginIPRequests        int           `env:"AUTH_RATE_LIMITER_LOGIN_IP_REQUESTS"        default:"20"    v:"gt=0"`
	LoginWindow            time.Duration `env:"AUTH_RATE_LIMITER_LOGIN_WINDOW"             default:"1m"    v:"gt=0"`
	SignupIPRequests       int           `env:"AUTH_RATE_LIMITER_SIGNUP_IP_REQUESTS"       default:"5"     v:"gt=0"`
	SignupWindow           time.Duration `env:"AUTH_RATE_LIMITER_SIGNUP_WINDOW"            default:"1h"    v:"gt=0"`
	RefreshSessionRequests int           `env:"AUTH_RATE_LIMITER_REFRESH_SESSION_REQUESTS" default:"30"    v:"gt=0"`
	RefreshWindow          time.Duration `env:"AUTH_RATE_LIMITER_REFRESH_WINDOW"           default:"1m"    v:"gt=0"`
}

type Cache

type Cache struct {
	Engine    string `env:"CACHE_ENGINE" default:"local" v:"oneof=local memcached redis"`
	Local     Local
	Redis     Redis
	Memcached Memcached
}

type Config

type Config struct {
	sync.RWMutex
	Core     Core
	Limits   Limits
	Logger   Logger
	Tracing  Tracing
	Sentry   Sentry
	Vault    Vault
	Etcd     Etcd
	Database Database
	Cache    Cache
	Events   Events
	Pprof    Pprof
	Server   Server
	Outbox   Outbox
	Auth     Auth
}

func New

func New() (*Config, error)

func (*Config) String

func (c *Config) String() string

type Core

type Core struct {
	ServiceName                string        `env:"SERVICE_NAME"                  default:"go42"`
	Environment                string        `env:"ENVIRONMENT"                   default:"default"`
	StartupConnectTimeout      time.Duration `env:"STARTUP_CONNECT_TIMEOUT"       default:"1m"      v:"gt=0"`
	StartupRetryInitialBackoff time.Duration `env:"STARTUP_RETRY_INITIAL_BACKOFF" default:"500ms"   v:"gt=0"`
	StartupRetryMaxBackoff     time.Duration `env:"STARTUP_RETRY_MAX_BACKOFF"     default:"5s"      v:"gt=0"`
	ReadinessCheckTimeout      time.Duration `env:"READINESS_CHECK_TIMEOUT"       default:"2s"      v:"gt=0"`
	ReadinessCheckInterval     time.Duration `env:"READINESS_CHECK_INTERVAL"      default:"5s"      v:"gt=0"`
	ShutdownGracePeriod        time.Duration `env:"SHUTDOWN_GRACE_PERIOD"         default:"10s"`
	ShutdownWaitForProbe       time.Duration `env:"SHUTDOWN_WAIT_FOR_PROBE"       default:"2s"`
	ShutdownComponentTimeout   time.Duration `env:"SHUTDOWN_COMPONENT_TIMEOUT"    default:"3s"      v:"gt=0"`
}

type Database

type Database struct {
	Engine      string `env:"DATABASE_ENGINE"       default:"sqlite"   v:"oneof=sqlite pgsql mysql"`
	MigratePath string `env:"DATABASE_MIGRATE_PATH" default:"/migrate"`
	LogQueries  bool   `env:"DATABASE_LOG_QUERIES"  default:"false"`
	Sqlite      Sqlite
	Pgsql       Pgsql
	Mysql       Mysql
}

func (Database) FullMigratePath

func (db Database) FullMigratePath() string

type Etcd

type Etcd struct {
	Enabled      bool          `env:"ETCD_ENABLED"       default:"false"`
	Hosts        []string      `env:"ETCD_HOST"          default:"localhost:2379"`
	Timeout      time.Duration `env:"ETCD_TIMEOUT"       default:"5s"`
	Method       string        `env:"ETCD_METHOD"        default:"bind"`
	SyncInterval time.Duration `env:"ETCD_SYNC_INTERVAL" default:"5m"`
}

type Events

type Events struct {
	Engine     string `env:"EVENTS_ENGINE"      default:"gochan" v:"oneof=none gochan nats rabbitmq kafka"`
	TLSEnabled bool   `env:"EVENTS_TLS_ENABLED" default:"false"`
	Publisher  EventsPublisher
	Consumer   EventsConsumer
	TLS        EventsTLS
	NATS       EventsNATS
	RabbitMQ   EventsRabbitMQ
	Kafka      EventsKafka
}

type EventsConsumer

type EventsConsumer struct {
	Group                 string        `env:"EVENTS_CONSUMER_GROUP"           default:"default" v:"required"`
	MaxRetries            int           `env:"EVENTS_CONSUMER_MAX_RETRIES"     default:"3"       v:"gte=0,lte=100"`
	InitialBackoff        time.Duration `env:"EVENTS_CONSUMER_INITIAL_BACKOFF" default:"250ms"   v:"gt=0"`
	MaxBackoff            time.Duration `env:"EVENTS_CONSUMER_MAX_BACKOFF"     default:"5s"      v:"gt=0"`
	DeadLetterTopicSuffix string        `env:"EVENTS_CONSUMER_DLQ_SUFFIX"      default:"_dlq"    v:"required"`
}

type EventsKafka

type EventsKafka struct {
	Brokers                   []string      `env:"KAFKA_BROKERS"                      default:"localhost:9092"`
	TopicAutoCreation         bool          `env:"KAFKA_TOPIC_AUTO_CREATE"            default:"false"`
	SASLMechanism             string        `env:"KAFKA_SASL_MECHANISM"               default:""               v:"omitempty,oneof=PLAIN SCRAM-SHA-256 SCRAM-SHA-512"`
	SASLUser                  string        `env:"KAFKA_SASL_USER"                    default:""`
	SASLPassword              string        `env:"KAFKA_SASL_PASSWORD"                default:""`
	ClientID                  string        `env:"KAFKA_CLIENT_ID"                    default:""`
	Version                   string        `env:"KAFKA_VERSION"                      default:"4.0.0"`
	DialTimeout               time.Duration `env:"KAFKA_DIAL_TIMEOUT"                 default:"5s"             v:"gt=0"`
	ReadTimeout               time.Duration `env:"KAFKA_READ_TIMEOUT"                 default:"5s"             v:"gt=0"`
	WriteTimeout              time.Duration `env:"KAFKA_WRITE_TIMEOUT"                default:"5s"             v:"gt=0"`
	KeepAlive                 time.Duration `env:"KAFKA_KEEP_ALIVE"                   default:"0s"             v:"gte=0"`
	ProducerTimeout           time.Duration `env:"KAFKA_PRODUCER_TIMEOUT"             default:"5s"             v:"gt=0"`
	ProducerMetadataTimeout   time.Duration `env:"KAFKA_PRODUCER_METADATA_TIMEOUT"    default:"5s"             v:"gt=0"`
	ProducerRetryMax          int           `env:"KAFKA_PRODUCER_RETRY_MAX"           default:"3"              v:"gt=0"`
	ProducerRetryBackoff      time.Duration `env:"KAFKA_PRODUCER_RETRY_BACKOFF"       default:"100ms"          v:"gt=0"`
	ProducerMaxMessageBytes   int           `env:"KAFKA_PRODUCER_MAX_MESSAGE_BYTES"   default:"1000000"        v:"gt=0"`
	ProducerCompression       string        `env:"KAFKA_PRODUCER_COMPRESSION"         default:"none"           v:"oneof=none gzip snappy lz4 zstd"`
	ConsumerRetryBackoff      time.Duration `env:"KAFKA_CONSUMER_RETRY_BACKOFF"       default:"2s"             v:"gt=0"`
	ConsumerMaxWaitTime       time.Duration `env:"KAFKA_CONSUMER_MAX_WAIT_TIME"       default:"250ms"          v:"gt=0"`
	ConsumerMaxProcessingTime time.Duration `env:"KAFKA_CONSUMER_MAX_PROCESSING_TIME" default:"100ms"          v:"gt=0"`
	ConsumerOffsetInitial     int64         `env:"KAFKA_CONSUMER_OFFSET_INITIAL"      default:"-2"             v:"oneof=-2 -1"`
	ConsumerSessionTimeout    time.Duration `env:"KAFKA_CONSUMER_SESSION_TIMEOUT"     default:"10s"            v:"gt=0"`
	ConsumerHeartbeatInterval time.Duration `env:"KAFKA_CONSUMER_HEARTBEAT_INTERVAL"  default:"3s"             v:"gt=0"`
	ConsumerRebalanceStrategy string        `env:"KAFKA_CONSUMER_REBALANCE_STRATEGY"  default:"range"          v:"oneof=range roundrobin sticky"`
	MetadataRefreshFrequency  time.Duration `env:"KAFKA_METADATA_REFRESH_FREQUENCY"   default:"10m"            v:"gt=0"`
}

type EventsNATS

type EventsNATS struct {
	DSN              string               `env:"NATS_DSN"               default:"nats://localhost:4222"`
	ClientName       string               `env:"NATS_CLIENT_NAME"       default:""`
	Token            string               `env:"NATS_TOKEN"             default:""`
	User             string               `env:"NATS_USER"              default:""`
	Password         string               `env:"NATS_PASSWORD"          default:""`
	CredentialsFile  string               `env:"NATS_CREDENTIALS_FILE"  default:""`
	ConsumerBindings NATSConsumerBindings `env:"NATS_CONSUMER_BINDINGS" default:""`
	ConnTimeout      time.Duration        `env:"NATS_CONN_TIMEOUT"      default:"5s"                    v:"gt=0"`
	ConnRetry        bool                 `env:"NATS_CONN_RETRY"        default:"false"`
	MaxRetry         int                  `env:"NATS_MAX_RETRY"         default:"-1"                    v:"gte=-1"`
	RetryDelay       time.Duration        `env:"NATS_RETRY_DELAY"       default:"1s"                    v:"gt=0"`
	JetStream        EventsNATSJetStream
	Publisher        EventsNATSPublisher
	Subscriber       EventsNATSSubscriber
}

type EventsNATSJetStream

type EventsNATSJetStream struct {
	AutoProvision bool `env:"NATS_JETSTREAM_AUTO_PROVISION" default:"false"`
}

type EventsNATSPublisher added in v0.9.79

type EventsNATSPublisher struct {
	AckTimeout time.Duration `env:"NATS_PUB_ACK_TIMEOUT" default:"5s" v:"gt=0"`
}

type EventsNATSSubscriber

type EventsNATSSubscriber struct {
	WorkerCount  int           `env:"NATS_SUB_WORKER_COUNT"  default:"1"   v:"gt=0"`
	Timeout      time.Duration `env:"NATS_SUB_TIMEOUT"       default:"30s" v:"gt=0"`
	AckTimeout   time.Duration `env:"NATS_SUB_ACK_TIMEOUT"   default:"30s" v:"gt=0"`
	CloseTimeout time.Duration `env:"NATS_SUB_CLOSE_TIMEOUT" default:"30s" v:"gt=0"`
}

type EventsPublisher added in v0.9.79

type EventsPublisher struct {
	MaxInflight int `env:"EVENTS_PUBLISH_MAX_INFLIGHT" default:"32" v:"gt=0"`
}

type EventsRabbitMQ

type EventsRabbitMQ struct {
	DSN                      string        `env:"RABBITMQ_DSN"                        default:"amqp://guest:guest@localhost:5672/"`
	AutoProvision            bool          `env:"RABBITMQ_AUTO_PROVISION"             default:"false"`
	ConnectTimeout           time.Duration `env:"RABBITMQ_CONNECT_TIMEOUT"            default:"5s"                                 v:"gt=0"`
	ReconnectInitialInterval time.Duration `env:"RABBITMQ_RECONNECT_INITIAL_INTERVAL" default:"500ms"                              v:"gt=0"`
	ReconnectMultiplier      float64       `env:"RABBITMQ_RECONNECT_MULTIPLIER"       default:"1.5"                                v:"gte=1"`
	ReconnectMaxInterval     time.Duration `env:"RABBITMQ_RECONNECT_MAX_INTERVAL"     default:"30s"                                v:"gt=0"`
	ConsumeConsumerName      string        `env:"RABBITMQ_CONSUME_CONSUMER_NAME"      default:""`
	ConsumeExclusive         bool          `env:"RABBITMQ_CONSUME_EXCLUSIVE"          default:"false"`
	ConsumePrefetchCount     int           `env:"RABBITMQ_CONSUME_PREFETCH_COUNT"     default:"1"                                  v:"gt=0"`
	ConsumePrefetchSize      int           `env:"RABBITMQ_CONSUME_PREFETCH_SIZE"      default:"0"                                  v:"gte=0"`
	ConsumeQosGlobal         bool          `env:"RABBITMQ_CONSUME_QOS_GLOBAL"         default:"false"`
	MessageUUIDHeader        string        `env:"RABBITMQ_MESSAGE_UUID_HEADER"        default:""`
}

type EventsTLS added in v0.9.79

type EventsTLS struct {
	CAFile     string `env:"EVENTS_TLS_CA_FILE"     default:""`
	CertFile   string `env:"EVENTS_TLS_CERT_FILE"   default:""`
	KeyFile    string `env:"EVENTS_TLS_KEY_FILE"    default:""`
	ServerName string `env:"EVENTS_TLS_SERVER_NAME" default:""`
}

type GRPC

type GRPC struct {
	Listen               string `env:"SERVER_GRPC_LISTEN"                  default:":50051"`
	MaxRecvMsgSize       int    `env:"SERVER_GRPC_MAX_RECV_MSG_SIZE_BYTES" default:"4194304"`
	MaxSendMsgSize       int    `env:"SERVER_GRPC_MAX_SEND_MSG_SIZE_BYTES" default:"4194304"`
	ReflectionEnabled    bool   `env:"SERVER_GRPC_REFLECTION_ENABLED"      default:"false"`
	AuthorisationEnabled bool   `env:"SERVER_GRPC_AUTHORIZATION_ENABLED"   default:"true"`
	TLS                  GRPCTLS
	RateLimiter          GRPCRateLimiter
}

type GRPCRateLimiter

type GRPCRateLimiter struct {
	Enabled bool          `env:"SERVER_GRPC_RATE_LIMITER_ENABLED" default:"false"`
	Rate    int           `env:"SERVER_GRPC_RATE_LIMITER_RATE"    default:"100"`
	Burst   int           `env:"SERVER_GRPC_RATE_LIMITER_BURST"   default:"10"`
	TTL     time.Duration `env:"SERVER_GRPC_RATE_LIMITER_TTL"     default:"10m"`
}

type GRPCTLS added in v0.9.79

type GRPCTLS struct {
	Enabled      bool   `env:"SERVER_GRPC_TLS_ENABLED"        default:"false"`
	CertFile     string `env:"SERVER_GRPC_TLS_CERT_FILE"      default:""`
	KeyFile      string `env:"SERVER_GRPC_TLS_KEY_FILE"       default:""`
	ClientCAFile string `env:"SERVER_GRPC_TLS_CLIENT_CA_FILE" default:""`
}

type HTTP

type HTTP struct {
	Listen            string        `env:"SERVER_HTTP_LISTEN"              default:":8080"`
	ReadTimeout       time.Duration `env:"SERVER_HTTP_READ_TIMEOUT"        default:"5s"`
	WriteTimeout      time.Duration `env:"SERVER_HTTP_WRITE_TIMEOUT"       default:"5s"`
	StaticRoot        string        `env:"SERVER_HTTP_STATIC_ROOT"         default:"/usr/share/www"`
	SwaggerRoot       string        `env:"SERVER_HTTP_SWAGGER_ROOT"        default:"/usr/share/www/api"`
	SwaggerDark       bool          `env:"SERVER_HTTP_SWAGGER_DARK"        default:"true"`
	BodyLimitKB       int64         `env:"SERVER_HTTP_BODY_LIMIT_KB"       default:"1024"`
	CORSAllowOrigins  []string      `env:"SERVER_HTTP_CORS_ALLOW_ORIGINS"  default:"*"`
	TrustedProxyCIDRs []string      `env:"SERVER_HTTP_TRUSTED_PROXY_CIDRS"                              v:"omitempty,dive,cidr"`
	RateLimiter       HTTPRateLimiter
}

type HTTPRateLimiter

type HTTPRateLimiter struct {
	Enabled bool          `env:"SERVER_HTTP_RATE_LIMITER_ENABLED" default:"false"`
	Rate    int           `env:"SERVER_HTTP_RATE_LIMITER_RATE"    default:"100"`
	Burst   int           `env:"SERVER_HTTP_RATE_LIMITER_BURST"   default:"10"`
	TTL     time.Duration `env:"SERVER_HTTP_RATE_LIMITER_TTL"     default:"10m"`
}

type Limits

type Limits struct {
	AutoMemLimitEnabled bool    `env:"AUTOMEMLIMIT_ENABLED" default:"false"`
	MemLimitRatio       float64 `env:"MEMLIMIT_RATIO"       default:"0.9"   v:"gte=0.2,lte=1.0"`
}

type Local

type Local struct {
	Capacity     uint64 `env:"CACHE_LOCAL_CAPACITY"       default:"10000"`
	MaxCostBytes uint64 `env:"CACHE_LOCAL_MAX_COST_BYTES" default:"1073741824"`
}

type Logger

type Logger struct {
	LogLevel  string `env:"LOG_LEVEL"      default:"info"   v:"oneof=debug info warn error"`
	LogOutput string `env:"LOG_OUTPUT"     default:"stdout" v:"oneof=none stdout stderr file"`
	LogFormat string `env:"LOG_FORMAT"     default:"json"   v:"oneof=json text tint"`
	AddSource bool   `env:"LOG_ADD_SOURCE" default:"true"`
}

func (*Logger) Level

func (l *Logger) Level() slog.Level

type Memcached

type Memcached struct {
	Hosts        []string      `env:"CACHE_MEMCACHED_HOSTS"          default:"localhost:11211"`
	Timeout      time.Duration `env:"CACHE_MEMCACHED_TIMEOUT"        default:"1s"`
	MaxIdleConns int           `env:"CACHE_MEMCACHED_MAX_IDLE_CONNS" default:"100"`
}

type Mysql

type Mysql struct {
	Master          MysqlMaster
	Slave           MysqlSlave
	ConnMaxIdleTime time.Duration `env:"DATABASE_MYSQL_CONN_MAX_IDLE_TIME" default:"10m"`
	ConnMaxLifetime time.Duration `env:"DATABASE_MYSQL_CONN_MAX_LIFETIME"  default:"30m"`
	MaxIdleConns    int           `env:"DATABASE_MYSQL_MAX_IDLE_CONNS"     default:"10"`
	MaxOpenConns    int           `env:"DATABASE_MYSQL_MAX_OPEN_CONNS"     default:"100"`
	QueryTimeout    time.Duration `env:"DATABASE_MYSQL_QUERY_TIMEOUT"      default:"10s"`
}

type MysqlMaster

type MysqlMaster struct {
	Host     string `env:"DATABASE_MYSQL_MASTER_HOST"     default:"localhost"`
	Port     int    `env:"DATABASE_MYSQL_MASTER_PORT"     default:"3306"`
	User     string `env:"DATABASE_MYSQL_MASTER_USER"     default:"user"`
	Password string `env:"DATABASE_MYSQL_MASTER_PASSWORD" default:"qwerty"`
	Charset  string `env:"DATABASE_MYSQL_MASTER_CHARSET"  default:"utf8mb4"`
	Name     string `env:"DATABASE_MYSQL_MASTER_NAME"     default:"go42"`
}

func (MysqlMaster) DSN

func (db MysqlMaster) DSN() string

type MysqlSlave

type MysqlSlave struct {
	Host     string `env:"DATABASE_MYSQL_SLAVE_HOST"     default:""`
	Port     int    `env:"DATABASE_MYSQL_SLAVE_PORT"     default:"3306"`
	User     string `env:"DATABASE_MYSQL_SLAVE_USER"     default:"user"`
	Password string `env:"DATABASE_MYSQL_SLAVE_PASSWORD" default:"qwerty"`
	Charset  string `env:"DATABASE_MYSQL_SLAVE_CHARSET"  default:"utf8mb4"`
	Name     string `env:"DATABASE_MYSQL_SLAVE_NAME"     default:"go42"`
}

func (MysqlSlave) DSN

func (db MysqlSlave) DSN() string

type NATSConsumerBindings added in v0.9.81

type NATSConsumerBindings map[string]nats.ConsumerBinding

func (*NATSConsumerBindings) UnmarshalText added in v0.9.81

func (b *NATSConsumerBindings) UnmarshalText(text []byte) error

UnmarshalText decodes the JSON object supplied by NATS_CONSUMER_BINDINGS.

type Otel

type Otel struct {
	GrpcHost string `env:"TRACING_OTEL_GRPC_HOST" default:"localhost:4317"`
}

type Outbox

type Outbox struct {
	WorkerRunInterval   time.Duration `env:"OUTBOX_WORKER_INTERVAL"       default:"5s"   v:"gt=0"`
	WorkerBatchSize     int           `env:"OUTBOX_WORKER_BATCH_SIZE"     default:"1000" v:"gt=0"`
	PublishTimeout      time.Duration `env:"OUTBOX_PUBLISH_TIMEOUT"       default:"10s"  v:"gt=0"`
	RetryInitialBackoff time.Duration `env:"OUTBOX_RETRY_INITIAL_BACKOFF" default:"5s"   v:"gt=0"`
	RetryMaxBackoff     time.Duration `env:"OUTBOX_RETRY_MAX_BACKOFF"     default:"5m"   v:"gt=0"`
	CleanupInterval     time.Duration `env:"OUTBOX_CLEANUP_INTERVAL"      default:"1m"   v:"gt=0"`
	CleanupBatchSize    int           `env:"OUTBOX_CLEANUP_BATCH_SIZE"    default:"1000" v:"gt=0"`
	CleanupMaxBatches   int           `env:"OUTBOX_CLEANUP_MAX_BATCHES"   default:"20"   v:"gt=0"`
	CleanupRetention    time.Duration `env:"OUTBOX_CLEANUP_RETENTION"     default:"168h" v:"gt=0"`
}

type Pgsql

type Pgsql struct {
	Master          PgsqlMaster
	Slave           PgsqlSlave
	ConnMaxIdleTime time.Duration `env:"DATABASE_PGSQL_CONN_MAX_IDLE_TIME" default:"10m"`
	ConnMaxLifetime time.Duration `env:"DATABASE_PGSQL_CONN_MAX_LIFETIME"  default:"30m"`
	MaxIdleConns    int           `env:"DATABASE_PGSQL_MAX_IDLE_CONNS"     default:"10"`
	MaxOpenConns    int           `env:"DATABASE_PGSQL_MAX_OPEN_CONNS"     default:"100"`
	QueryTimeout    time.Duration `env:"DATABASE_PGSQL_QUERY_TIMEOUT"      default:"10s"`
}

type PgsqlMaster

type PgsqlMaster struct {
	Host     string `env:"DATABASE_PGSQL_MASTER_HOST"     default:"localhost"`
	Port     int    `env:"DATABASE_PGSQL_MASTER_PORT"     default:"5432"`
	User     string `env:"DATABASE_PGSQL_MASTER_USER"     default:"user"`
	Password string `env:"DATABASE_PGSQL_MASTER_PASSWORD" default:"qwerty"`
	Name     string `env:"DATABASE_PGSQL_MASTER_NAME"     default:"go42"`
}

func (PgsqlMaster) DSN

func (db PgsqlMaster) DSN() string

type PgsqlSlave

type PgsqlSlave struct {
	Host     string `env:"DATABASE_PGSQL_SLAVE_HOST"     default:""`
	Port     int    `env:"DATABASE_PGSQL_SLAVE_PORT"     default:"5432"`
	User     string `env:"DATABASE_PGSQL_SLAVE_USER"     default:"user"`
	Password string `env:"DATABASE_PGSQL_SLAVE_PASSWORD" default:"qwerty"`
	Name     string `env:"DATABASE_PGSQL_SLAVE_NAME"     default:"go42"`
}

func (PgsqlSlave) DSN

func (db PgsqlSlave) DSN() string

type Pprof

type Pprof struct {
	Enabled      bool          `env:"PPROF_ENABLED"       default:"false"`
	Listen       string        `env:"PPROF_LISTEN"        default:":6060"`
	Prefix       string        `env:"PPROF_PREFIX"        default:"/debug/pprof"`
	ReadTimeout  time.Duration `env:"PPROF_READ_TIMEOUT"  default:"5s"`
	WriteTimeout time.Duration `env:"PPROF_WRITE_TIMEOUT" default:"60s"`
}

type Redis

type Redis struct {
	Host                  string        `env:"CACHE_REDIS_HOST"                    default:"localhost:6379"`
	DB                    int           `env:"CACHE_REDIS_DB"                      default:"0"`
	Username              string        `env:"CACHE_REDIS_USERNAME"                default:""`
	Password              string        `env:"CACHE_REDIS_PASSWORD"                default:""`
	MaxRetries            int           `env:"CACHE_REDIS_MAX_RETRIES"             default:"3"`
	MinRetryBackoff       time.Duration `env:"CACHE_REDIS_MIN_RETRY_BACKOFF"       default:"8ms"`
	MaxRetryBackoff       time.Duration `env:"CACHE_REDIS_MAX_RETRY_BACKOFF"       default:"512ms"`
	DialTimeout           time.Duration `env:"CACHE_REDIS_DIAL_TIMEOUT"            default:"5s"`
	ReadTimeout           time.Duration `env:"CACHE_REDIS_READ_TIMEOUT"            default:"3s"`
	WriteTimeout          time.Duration `env:"CACHE_REDIS_WRITE_TIMEOUT"           default:"3s"`
	ContextTimeoutEnabled bool          `env:"CACHE_REDIS_CONTEXT_TIMEOUT_ENABLED" default:"true"`
	PoolSize              int           `env:"CACHE_REDIS_POOL_SIZE"               default:"10"`
	PoolTimeout           time.Duration `env:"CACHE_REDIS_POOL_TIMEOUT"            default:"4s"`
	MinIdleConns          int           `env:"CACHE_REDIS_MIN_IDLE_CONNS"          default:"0"`
	MaxIdleConns          int           `env:"CACHE_REDIS_MAX_IDLE_CONNS"          default:"0"`
	MaxActiveConns        int           `env:"CACHE_REDIS_MAX_ACTIVE_CONNS"        default:"0"`
	ConnMaxIdleTime       time.Duration `env:"CACHE_REDIS_CONN_MAX_IDLE_TIME"      default:"0s"`
	ConnMaxLifetime       time.Duration `env:"CACHE_REDIS_CONN_MAX_LIFETIME"       default:"0s"`
}

type Sentry

type Sentry struct {
	Enabled    bool    `env:"SENTRY_ENABLED"     default:"false"`
	DSN        string  `env:"SENTRY_DSN"         default:""`
	Debug      bool    `env:"SENTRY_DEBUG"       default:"false"`
	AddSource  bool    `env:"SENTRY_ADD_SOURCE"  default:"true"`
	Stacktrace bool    `env:"SENTRY_STACKTRACE"  default:"false"`
	SampleRate float64 `env:"SENTRY_SAMPLE_RATE" default:"1.0"   v:"gte=0.0,lte=1.0"`
}

type Server

type Server struct {
	HTTP HTTP
	GRPC GRPC
}

type Sqlite

type Sqlite struct {
	Mode       string `env:"DATABASE_SQLITE_MODE"       default:"memory"`
	SqliteFile string `env:"DATABASE_SQLITE_PATH"       default:"file::memory:"`
	CacheMode  string `env:"DATABASE_SQLITE_CACHE_MODE" default:"shared"`
}

type Tracing

type Tracing struct {
	Enable             bool          `env:"TRACING_ENABLED"               default:"false"`
	Provider           string        `env:"TRACING_PROVIDER"              default:"otel"  v:"oneof=otel"`
	SamplingRate       float64       `env:"TRACING_SAMPLING_RATE"         default:"1.0"   v:"gte=0.0,lte=1.0"`
	Timeout            time.Duration `env:"TRACING_TIMEOUT"               default:"5s"`
	MaxExportBatchSize int           `env:"TRACING_MAX_EXPORT_BATCH_SIZE" default:"100"`
	MaxQueueSize       int           `env:"TRACING_MAX_QUEUE_SIZE"        default:"1000"`
	Otel               Otel
}

type Vault

type Vault struct {
	Enabled    bool          `env:"VAULT_ENABLED"     default:"false"`
	Host       string        `env:"VAULT_HOST"        default:"http://localhost:8200"`
	Timeout    time.Duration `env:"VAULT_TIMEOUT"     default:"5s"`
	AuthType   string        `env:"VAULT_AUTH_TYPE"   default:"token"`
	Token      string        `env:"VAULT_TOKEN"       default:"qwerty"`
	SecretPath string        `env:"VAULT_SECRET_PATH" default:"/secret/data/github.com/go42-dev/go42"`
	MountPath  string        `env:"VAULT_MOUNT_PATH"  default:"secret"`
}

Jump to

Keyboard shortcuts

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