Skip to content

cjtoolkit/ctx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

CJToolkit Context System

Just a simple context system.

Installation

go get github.com/cjtoolkit/ctx/v2

Usage

It's useful for storing configuration and dependencies (Dependency Injection) without having to rely on side effect.

Example

package ctx

import (
	"database/sql"
	"encoding/json"
	"log"
	"os"

	ctx "github.com/cjtoolkit/ctx/v2"
)

type Config struct {
	DbRsn string `json:"DbRsn"`
}

func GetConfig(context ctx.Context) Config {
	type ConfigContext struct{}
	return context.Persist(ConfigContext{}, func() (interface{}, error) {
		return initConfig(), nil
	}).(Config)
}

func initConfig() (config Config) {
	file, err := os.Open("setting.json")
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	err = json.NewDecoder(file).Decode(&config)
	if err != nil {
		log.Fatal(err)
	}

	return
}

func GetDatabaseConnection(context ctx.Context) *sql.DB {
	type DatabaseContext struct{}
	return context.Persist(DatabaseContext{}, func() (interface{}, error) {
		return initDatabaseConnection(context)
	}).(*sql.DB)
}

func initDatabaseConnection(context ctx.Context) (*sql.DB, error) {
	return sql.Open("postgres", GetConfig(context).DbRsn)
}

About

🛥 Just a simple context system for background and user request.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages