Back to godoc.org

Package paladin

v0.3.3
Latest Go to latest

The latest major version is .

Published: Jan 20, 2020 | License: MIT | Module: github.com/bilibili/kratos

Index

Examples

Variables

var (
	ErrNotExist       = errors.New("paladin: value key not exist")
	ErrTypeAssertion  = errors.New("paladin: value type assertion no match")
	ErrDifferentTypes = errors.New("paladin: value different types")
)

ErrNotExist value key not exist.

func Bool

func Bool(v *Value, def bool) bool

Bool return bool value.

func Close

func Close() error

Close close watcher.

func Drivers

func Drivers() []string

Drivers returns a sorted list of the names of the registered paladin driver.

func Duration

func Duration(v *Value, def time.Duration) time.Duration

Duration parses a duration string. A duration string is a possibly signed sequence of decimal numbers each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".

func Float32

func Float32(v *Value, def float32) float32

Float32 return float32 value.

func Float64

func Float64(v *Value, def float64) float64

Float64 return float32 value.

func Init

func Init(args ...interface{}) (err error)

Init init config client. If confPath is set, it inits file client by default Otherwise we could pass args to init remote client args[0]: driver name, string type

func Int

func Int(v *Value, def int) int

Int return int value.

func Int32

func Int32(v *Value, def int32) int32

Int32 return int32 value.

func Int64

func Int64(v *Value, def int64) int64

Int64 return int64 value.

func KeyNamed

func KeyNamed(key string) string

KeyNamed key naming to lower case.

func Keys

func Keys() []string

Keys return values key.

func Register

func Register(name string, driver Driver)

Register makes a paladin driver available by the provided name. If Register is called twice with the same name or if driver is nil, it panics.

func String

func String(v *Value, def string) string

String return string value.

func Watch

func Watch(key string, s Setter) error

Watch watch on a key. The configuration implements the setter interface, which is invoked when the configuration changes.

func WatchEvent

func WatchEvent(ctx context.Context, keys ...string) <-chan Event

WatchEvent watch on multi keys. Events are returned when the configuration changes.

type Client

type Client interface {
	Watcher
	Getter
}

Client is config client.

Example

ExampleClient is an example client usage. exmaple.toml:

bool = true
int = 100
float = 100.1
string = "text"
strings = ["a", "b", "c"]

Code:

package main

import (
	"context"
	"fmt"
	"github.com/BurntSushi/toml"
	"github.com/bilibili/kratos/pkg/conf/paladin"
)

type exampleConf struct {
	Bool    bool
	Int     int64
	Float   float64
	String  string
	Strings []string
}

func (e *exampleConf) Set(text string) error {
	var ec exampleConf
	if err := toml.Unmarshal([]byte(text), &ec); err != nil {
		return err
	}
	*e = ec
	return nil
}

func main() {
	if err := paladin.Init(); err != nil {
		panic(err)
	}
	var ec exampleConf
	// var setter
	if err := paladin.Watch("example.toml", &ec); err != nil {
		panic(err)
	}
	if err := paladin.Get("example.toml").UnmarshalTOML(&ec); err != nil {
		panic(err)
	}
	// use exampleConf
	// watch event key
	go func() {
		for event := range paladin.WatchEvent(context.TODO(), "key") {
			fmt.Println(event)
		}
	}()
}
var (
	// DefaultClient default client.
	DefaultClient Client
)

func NewFile

func NewFile(base string) (Client, error)

NewFile new a config file client. conf = /data/conf/app/ conf = /data/conf/app/xxx.toml

func NewMock

func NewMock(vs map[string]string) Client

NewMock new a config mock client.

type Driver

type Driver interface {
	New() (Client, error)
}

Driver defined paladin remote client impl each remote config center driver must do 1. implements `New` method 2. call `Register` to register itself

func GetDriver

func GetDriver(name string) (Driver, error)

GetDriver returns a driver implement by name.

type Event

type Event struct {
	Event EventType
	Key   string
	Value string
}

Event is watch event.

type EventType

type EventType int

EventType is config event.

const (
	// EventAdd config add event.
	EventAdd EventType = iota
	// EventUpdate config update event.
	EventUpdate
	// EventRemove config remove event.
	EventRemove
)

type Getter

type Getter interface {
	// Get a config value by a config key(may be a sven filename).
	Get(string) *Value
	// GetAll return all config key->value map.
	GetAll() *Map
}

Getter is value getter.

type Map

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

Map is config map, key(filename) -> value(file).

Example

ExampleMap is an example map usage. exmaple.toml:

bool = true
int = 100
float = 100.1
string = "text"
strings = ["a", "b", "c"]

[object]
string = "text"
bool = true
int = 100
float = 100.1
strings = ["a", "b", "c"]

Code:

package main

import (
	"fmt"
	"github.com/bilibili/kratos/pkg/conf/paladin"
)

func main() {
	var (
		m    paladin.TOML
		strs []string
	)
	// paladin toml
	if err := paladin.Watch("example.toml", &m); err != nil {
		panic(err)
	}
	// value string
	s, err := m.Get("string").String()
	if err != nil {
		s = "default"
	}
	fmt.Println(s)
	// value bool
	b, err := m.Get("bool").Bool()
	if err != nil {
		b = false
	}
	fmt.Println(b)
	// value int
	i, err := m.Get("int").Int64()
	if err != nil {
		i = 100
	}
	fmt.Println(i)
	// value float
	f, err := m.Get("float").Float64()
	if err != nil {
		f = 100.1
	}
	fmt.Println(f)
	// value slice
	if err = m.Get("strings").Slice(&strs); err == nil {
		fmt.Println(strs)
	}
}

func GetAll

func GetAll() *Map

GetAll return all config map.

func (*Map) Exist

func (m *Map) Exist(key string) bool

Exist check if values map exist a key.

func (*Map) Get

func (m *Map) Get(key string) *Value

Get return get value by key.

func (*Map) Keys

func (m *Map) Keys() []string

Keys return map keys.

func (*Map) Load

func (m *Map) Load() map[string]*Value

Load returns the value set by the most recent Store.

func (*Map) Store

func (m *Map) Store(values map[string]*Value)

Store sets the value of the Value to values map.

type Mock

type Mock struct {
	C chan Event
	*Map
}

Mock is Mock config client.

func (*Mock) Close

func (m *Mock) Close() error

Close close watcher.

func (*Mock) GetAll

func (m *Mock) GetAll() *Map

GetAll return value map.

func (*Mock) WatchEvent

func (m *Mock) WatchEvent(ctx context.Context, key ...string) <-chan Event

WatchEvent watch multi key.

type Setter

type Setter interface {
	Set(string) error
}

Setter is value setter.

type TOML

type TOML = Map

TOML is toml map.

func (*TOML) Set

func (m *TOML) Set(text string) error

Set set the map by value.

func (*TOML) UnmarshalText

func (m *TOML) UnmarshalText(text []byte) error

UnmarshalText implemented toml.

type Value

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

Value is config value, maybe a json/toml/ini/string file.

func Get

func Get(key string) *Value

Get return value by key.

func NewValue

func NewValue(val interface{}, raw string) *Value

NewValue new a value

func (*Value) Bool

func (v *Value) Bool() (bool, error)

Bool return bool value.

func (*Value) Duration

func (v *Value) Duration() (time.Duration, error)

Duration parses a duration string. A duration string is a possibly signed sequence of decimal numbers each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".

func (*Value) Float32

func (v *Value) Float32() (float32, error)

Float32 return float32 value.

func (*Value) Float64

func (v *Value) Float64() (float64, error)

Float64 return float64 value.

func (*Value) Int

func (v *Value) Int() (int, error)

Int return int value.

func (*Value) Int32

func (v *Value) Int32() (int32, error)

Int32 return int32 value.

func (*Value) Int64

func (v *Value) Int64() (int64, error)

Int64 return int64 value.

func (*Value) Raw

func (v *Value) Raw() (string, error)

Raw return raw value.

func (*Value) Slice

func (v *Value) Slice(dst interface{}) error

Slice scan a slice interface, if slice has element it will be discard.

func (*Value) String

func (v *Value) String() (string, error)

String return string value.

func (*Value) Unmarshal

func (v *Value) Unmarshal(un encoding.TextUnmarshaler) error

Unmarshal is the interface implemented by an object that can unmarshal a textual representation of itself.

func (*Value) UnmarshalJSON

func (v *Value) UnmarshalJSON(dst interface{}) error

UnmarshalJSON unmarhsal json to struct.

func (*Value) UnmarshalTOML

func (v *Value) UnmarshalTOML(dst interface{}) error

UnmarshalTOML unmarhsal toml to struct.

func (*Value) UnmarshalYAML

func (v *Value) UnmarshalYAML(dst interface{}) error

UnmarshalYAML unmarshal yaml to struct.

type Watcher

type Watcher interface {
	WatchEvent(context.Context, ...string) <-chan Event
	Close() error
}

Watcher is config watcher.

Package Files

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier