golibdata

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2023 License: MIT Imports: 8 Imported by: 0

README

Golib Data

Note We are moving out from Gitlab. All packages are now migrated to github.com/golibs-starter/*. Please consider updating.

Database solutions for Golang project. Includes:

  • MySQL database
  • Postgres database
  • Sqlite database
  • Redis database
Setup instruction

Base setup, see GoLib Instruction

Both go get and go mod are supported.

go get github.com/golibs-starter/golib-data
Usage

Using fx.Option to include dependencies for injection.

package main

import (
    "database/sql"
    "github.com/golibs-starter/golib-data"
    "github.com/golibs-starter/golib-data/datasource/dialector"
    "github.com/golibs-starter/golib-data/testutil"
    "github.com/redis/go-redis/v9"
    "go.uber.org/fx"
    "gorm.io/gorm"
)

func main() {
    fx.New(
        // When you want to use redis
        golibdata.RedisOpt(),

        // When you want to use datasource
        // DatasourceOpt will bootstrap datasource
        // with all available strategies (mysql, postgres, sqlite).
        golibdata.DatasourceOpt(),
        // If you not want to bootstrap all strategies,
        // you can specify which strategies will be bootstrapped
        golibdata.StrategicDatasourceOpt(dialector.NewMysql, dialector.NewPostgres),

        // Demo way to using redis
        fx.Provide(funcUseRedis),
        fx.Provide(funcUseOrm),
        fx.Provide(funcUseNativeDbConnection),

        // ==================== TEST UTILS =================
        // A useful util to easy to interact with database in test.
        golibdataTestUtil.EnableDatabaseTestUtilOpt(),
        golibdataTestUtil.EnableRedisTestUtilOpt(),

        // This useful when you want to truncate some tables before test.
        // Eg: https://github.com/golibs-starter/golib-sample/-/tree/develop/src/public/testing/create_order_controller_test.go
        golibdataTestUtil.TruncateTablesOpt("table1", "table2"),
    )
}

func funcUseRedis(redisClient *redis.Client) {
    // do something with redis client
}

func funcUseOrm(db *gorm.DB) {
    // do something with gorm
}

func funcUseNativeDbConnection(db *sql.DB) {
    // do something with the native database connection
}

Configuration
app:
    # Configuration available for golib.DatasourceOpt()
    datasource:
        # SQL driver. Supports: mysql, postgres, sqlite
        driver: mysql

        # Define the database host
        host: localhost

        # Define the database port
        port: 3306

        # Define the database name
        database: sample

        # Define the username for authentication
        username: root

        # Define the password for authentication
        password: secret

        # Extra params to add to the connection string
        params: parseTime=true

        # When dsn is provided, it will override all above connection configs
        dsn: user1@tcp(127.0.0.1:3306)/demo

        # The maximum number of open connections to the database.
        # Default 10 connections
        maxOpenConns: 10

        # The maximum amount of time a connection may be reused.
        # Default 30m
        connMaxLifetime: 30m

        # The maximum number of connections in the idle connection pool.
        # Default 2
        maxIdleConns: 2

        # The maximum amount of time a connection may be idle.
        # Default 10m
        connMaxIdleTime: 10m

        # The query log level.
        # There are four levels: "SILENT", "ERROR", "WARN", "INFO".
        # Default SILENT
        logLevel: SILENT

    # Configuration available for golib.RedisOpt()
    redis:
        # Define the redis host. Default: `localhost`
        host: localhost

        # Define the redis port. Default: `6379`
        port: 6379

        # Define the redis database. Default: `0`
        database: 0

        # Define the redis username
        username: ""

        # Define the redis password
        password: ""

        # Enable or disable TLS
        enableTLS: true

        # Maximum number of socket connections.
        # Default 10 connections
        poolSize: 10

        # Connection age at which client retires (closes) the connection.
        # Default is Zero means not close aged connections.
        maxConnAge: 0

        # Minimum number of idle connections which is useful when establishing
        # new connection is slow.
        # Default 2 idle connections
        minIdleConns: 2

        # Amount of time after which client closes idle connections.
        # Should be less than server's timeout.
        # Default is 5 minutes. -1 disables idle timeout check.
        idleTimeout: 5m

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DatasourceCommonOpt

func DatasourceCommonOpt() fx.Option

func DatasourceOpt

func DatasourceOpt() fx.Option

DatasourceOpt provide option to bootstrap datasource with all available strategies. If you want to specify which database is bootstrapped, use StrategicDatasourceOpt instead.

func ProvideDatasourceDialStrategy

func ProvideDatasourceDialStrategy(constructor interface{}) fx.Option

func RedisOpt

func RedisOpt() fx.Option

func StrategicDatasourceOpt

func StrategicDatasourceOpt(strategyConstructors ...interface{}) fx.Option

StrategicDatasourceOpt provide option to bootstrap datasource with specified strategies. Eg: - When you want to bootstrap Mysql only: StrategicDatasourceOpt(dialector.NewMysql) - Or both mysql and postgres: StrategicDatasourceOpt(dialector.NewMysql, dialector.NewPostgres)

Types

type DatasourceOut

type DatasourceOut struct {
	fx.Out
	Connection    *gorm.DB
	SqlConnection *sql.DB
}

func NewDatasource

func NewDatasource(resolver *dialector.Resolver, properties *datasource.Properties) (DatasourceOut, error)

type NewDialResolverIn

type NewDialResolverIn struct {
	fx.In
	DialStrategies []dialector.Strategy `group:"datasource_dial_strategy"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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