group

package
v1.1.1 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2023 License: Apache-2.0 Imports: 1 Imported by: 0

README

group

import "github.com/ccheers/xpkg/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

type Group

Group is a lazy load container.

type Group struct {
    sync.RWMutex
    // contains filtered or unexported fields
}
func NewGroup
func NewGroup(new func() interface{}) *Group

NewGroup news a group container.

func (*Group) Clear
func (g *Group) Clear()

Clear deletes all objects.

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

Get gets the object by the given key.

Example

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

	group.Get("pass").(*Counter).Incr()

	group.Get("pass").(*Counter).Incr()

}
Output
Only Once

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

Reset resets the new function and deletes all existing objects.

Example

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

	newV2 := func() interface{} {
		fmt.Println("New V2")
		return &Counter{}
	}

	group.Reset(newV2)

	group.Get("pass").(*Counter).Incr()

}
Output
New V2

Generated by gomarkdoc

Documentation

Overview

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

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Group

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

Group is a lazy load container.

func NewGroup

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

NewGroup news a group container.

func (*Group) Clear

func (g *Group) Clear()

Clear deletes all objects.

func (*Group) Get

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

Get gets the object by the given key.

Example
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

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

Reset resets the new function and deletes all existing objects.

Example
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

Jump to

Keyboard shortcuts

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