kratos: github.com/bilibili/kratos/pkg/container/group Index | Examples | Files

package group

import "github.com/bilibili/kratos/pkg/container/group"

Package group provides a sample lazy load container. The group only creating a new object not until the object is needed by user. And it will cache all the objects to reduce the creation of object.

Index

Examples

Package Files

group.go

type Group Uses

type Group struct {
    sync.RWMutex
    // contains filtered or unexported fields
}

Group is a lazy load container.

func NewGroup Uses

func NewGroup(new func() interface{}) *Group

NewGroup news a group container.

func (*Group) Clear Uses

func (g *Group) Clear()

Clear deletes all objects.

func (*Group) Get Uses

func (g *Group) Get(key string) interface{}

Get gets the object by the given key.

Code:

new := func() interface{} {
    fmt.Println("Only Once")
    return &Counter{}
}
group := NewGroup(new)

// Create a new Counter
group.Get("pass").(*Counter).Incr()

// Get the created Counter again.
group.Get("pass").(*Counter).Incr()

Output:

Only Once

func (*Group) Reset Uses

func (g *Group) Reset(new func() interface{})

Reset resets the new function and deletes all existing objects.

Code:

new := func() interface{} {
    return &Counter{}
}
group := NewGroup(new)

newV2 := func() interface{} {
    fmt.Println("New V2")
    return &Counter{}
}
// Reset the new function and clear all created objects.
group.Reset(newV2)

// Create a new Counter
group.Get("pass").(*Counter).Incr()

Output:

New V2

Package group imports 1 packages (graph) and is imported by 1 packages. Updated 2019-05-28. Refresh now. Tools for package owners.