Documentation ¶
Overview ¶
Package gmap provides most commonly used map container which also support concurrent-safe/unsafe switch feature.
Index ¶
- type AnyAnyMap
- func (m *AnyAnyMap) Clear()
- func (m *AnyAnyMap) Clone(safe ...bool) *AnyAnyMap
- func (m *AnyAnyMap) Contains(key interface{}) bool
- func (m *AnyAnyMap) DeepCopy() interface{}
- func (m *AnyAnyMap) Diff(other *AnyAnyMap) (addedKeys, removedKeys, updatedKeys []interface{})
- func (m *AnyAnyMap) FilterEmpty()
- func (m *AnyAnyMap) FilterNil()
- func (m *AnyAnyMap) Flip()
- func (m *AnyAnyMap) Get(key interface{}) (value interface{})
- func (m *AnyAnyMap) GetOrSet(key interface{}, value interface{}) interface{}
- func (m *AnyAnyMap) GetOrSetFunc(key interface{}, f func() interface{}) interface{}
- func (m *AnyAnyMap) GetOrSetFuncLock(key interface{}, f func() interface{}) interface{}
- func (m *AnyAnyMap) GetVar(key interface{}) *gvar.Var
- func (m *AnyAnyMap) GetVarOrSet(key interface{}, value interface{}) *gvar.Var
- func (m *AnyAnyMap) GetVarOrSetFunc(key interface{}, f func() interface{}) *gvar.Var
- func (m *AnyAnyMap) GetVarOrSetFuncLock(key interface{}, f func() interface{}) *gvar.Var
- func (m *AnyAnyMap) IsEmpty() bool
- func (m *AnyAnyMap) IsSubOf(other *AnyAnyMap) bool
- func (m *AnyAnyMap) Iterator(f func(k interface{}, v interface{}) bool)
- func (m *AnyAnyMap) Keys() []interface{}
- func (m *AnyAnyMap) LockFunc(f func(m map[interface{}]interface{}))
- func (m *AnyAnyMap) Map() map[interface{}]interface{}
- func (m *AnyAnyMap) MapCopy() map[interface{}]interface{}
- func (m *AnyAnyMap) MapStrAny() map[string]interface{}
- func (m AnyAnyMap) MarshalJSON() ([]byte, error)
- func (m *AnyAnyMap) Merge(other *AnyAnyMap)
- func (m *AnyAnyMap) Pop() (key, value interface{})
- func (m *AnyAnyMap) Pops(size int) map[interface{}]interface{}
- func (m *AnyAnyMap) RLockFunc(f func(m map[interface{}]interface{}))
- func (m *AnyAnyMap) Remove(key interface{}) (value interface{})
- func (m *AnyAnyMap) Removes(keys []interface{})
- func (m *AnyAnyMap) Replace(data map[interface{}]interface{})
- func (m *AnyAnyMap) Search(key interface{}) (value interface{}, found bool)
- func (m *AnyAnyMap) Set(key interface{}, value interface{})
- func (m *AnyAnyMap) SetIfNotExist(key interface{}, value interface{}) bool
- func (m *AnyAnyMap) SetIfNotExistFunc(key interface{}, f func() interface{}) bool
- func (m *AnyAnyMap) SetIfNotExistFuncLock(key interface{}, f func() interface{}) bool
- func (m *AnyAnyMap) Sets(data map[interface{}]interface{})
- func (m *AnyAnyMap) Size() int
- func (m *AnyAnyMap) String() string
- func (m *AnyAnyMap) UnmarshalJSON(b []byte) error
- func (m *AnyAnyMap) UnmarshalValue(value interface{}) (err error)
- func (m *AnyAnyMap) Values() []interface{}
- type HashMap
- type IntAnyMap
- func (m *IntAnyMap) Clear()
- func (m *IntAnyMap) Clone() *IntAnyMap
- func (m *IntAnyMap) Contains(key int) bool
- func (m *IntAnyMap) DeepCopy() interface{}
- func (m *IntAnyMap) Diff(other *IntAnyMap) (addedKeys, removedKeys, updatedKeys []int)
- func (m *IntAnyMap) FilterEmpty()
- func (m *IntAnyMap) FilterNil()
- func (m *IntAnyMap) Flip()
- func (m *IntAnyMap) Get(key int) (value interface{})
- func (m *IntAnyMap) GetOrSet(key int, value interface{}) interface{}
- func (m *IntAnyMap) GetOrSetFunc(key int, f func() interface{}) interface{}
- func (m *IntAnyMap) GetOrSetFuncLock(key int, f func() interface{}) interface{}
- func (m *IntAnyMap) GetVar(key int) *gvar.Var
- func (m *IntAnyMap) GetVarOrSet(key int, value interface{}) *gvar.Var
- func (m *IntAnyMap) GetVarOrSetFunc(key int, f func() interface{}) *gvar.Var
- func (m *IntAnyMap) GetVarOrSetFuncLock(key int, f func() interface{}) *gvar.Var
- func (m *IntAnyMap) IsEmpty() bool
- func (m *IntAnyMap) IsSubOf(other *IntAnyMap) bool
- func (m *IntAnyMap) Iterator(f func(k int, v interface{}) bool)
- func (m *IntAnyMap) Keys() []int
- func (m *IntAnyMap) LockFunc(f func(m map[int]interface{}))
- func (m *IntAnyMap) Map() map[int]interface{}
- func (m *IntAnyMap) MapCopy() map[int]interface{}
- func (m *IntAnyMap) MapStrAny() map[string]interface{}
- func (m IntAnyMap) MarshalJSON() ([]byte, error)
- func (m *IntAnyMap) Merge(other *IntAnyMap)
- func (m *IntAnyMap) Pop() (key int, value interface{})
- func (m *IntAnyMap) Pops(size int) map[int]interface{}
- func (m *IntAnyMap) RLockFunc(f func(m map[int]interface{}))
- func (m *IntAnyMap) Remove(key int) (value interface{})
- func (m *IntAnyMap) Removes(keys []int)
- func (m *IntAnyMap) Replace(data map[int]interface{})
- func (m *IntAnyMap) Search(key int) (value interface{}, found bool)
- func (m *IntAnyMap) Set(key int, val interface{})
- func (m *IntAnyMap) SetIfNotExist(key int, value interface{}) bool
- func (m *IntAnyMap) SetIfNotExistFunc(key int, f func() interface{}) bool
- func (m *IntAnyMap) SetIfNotExistFuncLock(key int, f func() interface{}) bool
- func (m *IntAnyMap) Sets(data map[int]interface{})
- func (m *IntAnyMap) Size() int
- func (m *IntAnyMap) String() string
- func (m *IntAnyMap) UnmarshalJSON(b []byte) error
- func (m *IntAnyMap) UnmarshalValue(value interface{}) (err error)
- func (m *IntAnyMap) Values() []interface{}
- type IntIntMap
- func (m *IntIntMap) Clear()
- func (m *IntIntMap) Clone() *IntIntMap
- func (m *IntIntMap) Contains(key int) bool
- func (m *IntIntMap) DeepCopy() interface{}
- func (m *IntIntMap) Diff(other *IntIntMap) (addedKeys, removedKeys, updatedKeys []int)
- func (m *IntIntMap) FilterEmpty()
- func (m *IntIntMap) Flip()
- func (m *IntIntMap) Get(key int) (value int)
- func (m *IntIntMap) GetOrSet(key int, value int) int
- func (m *IntIntMap) GetOrSetFunc(key int, f func() int) int
- func (m *IntIntMap) GetOrSetFuncLock(key int, f func() int) int
- func (m *IntIntMap) IsEmpty() bool
- func (m *IntIntMap) IsSubOf(other *IntIntMap) bool
- func (m *IntIntMap) Iterator(f func(k int, v int) bool)
- func (m *IntIntMap) Keys() []int
- func (m *IntIntMap) LockFunc(f func(m map[int]int))
- func (m *IntIntMap) Map() map[int]int
- func (m *IntIntMap) MapCopy() map[int]int
- func (m *IntIntMap) MapStrAny() map[string]interface{}
- func (m IntIntMap) MarshalJSON() ([]byte, error)
- func (m *IntIntMap) Merge(other *IntIntMap)
- func (m *IntIntMap) Pop() (key, value int)
- func (m *IntIntMap) Pops(size int) map[int]int
- func (m *IntIntMap) RLockFunc(f func(m map[int]int))
- func (m *IntIntMap) Remove(key int) (value int)
- func (m *IntIntMap) Removes(keys []int)
- func (m *IntIntMap) Replace(data map[int]int)
- func (m *IntIntMap) Search(key int) (value int, found bool)
- func (m *IntIntMap) Set(key int, val int)
- func (m *IntIntMap) SetIfNotExist(key int, value int) bool
- func (m *IntIntMap) SetIfNotExistFunc(key int, f func() int) bool
- func (m *IntIntMap) SetIfNotExistFuncLock(key int, f func() int) bool
- func (m *IntIntMap) Sets(data map[int]int)
- func (m *IntIntMap) Size() int
- func (m *IntIntMap) String() string
- func (m *IntIntMap) UnmarshalJSON(b []byte) error
- func (m *IntIntMap) UnmarshalValue(value interface{}) (err error)
- func (m *IntIntMap) Values() []int
- type IntStrMap
- func (m *IntStrMap) Clear()
- func (m *IntStrMap) Clone() *IntStrMap
- func (m *IntStrMap) Contains(key int) bool
- func (m *IntStrMap) DeepCopy() interface{}
- func (m *IntStrMap) Diff(other *IntStrMap) (addedKeys, removedKeys, updatedKeys []int)
- func (m *IntStrMap) FilterEmpty()
- func (m *IntStrMap) Flip()
- func (m *IntStrMap) Get(key int) (value string)
- func (m *IntStrMap) GetOrSet(key int, value string) string
- func (m *IntStrMap) GetOrSetFunc(key int, f func() string) string
- func (m *IntStrMap) GetOrSetFuncLock(key int, f func() string) string
- func (m *IntStrMap) IsEmpty() bool
- func (m *IntStrMap) IsSubOf(other *IntStrMap) bool
- func (m *IntStrMap) Iterator(f func(k int, v string) bool)
- func (m *IntStrMap) Keys() []int
- func (m *IntStrMap) LockFunc(f func(m map[int]string))
- func (m *IntStrMap) Map() map[int]string
- func (m *IntStrMap) MapCopy() map[int]string
- func (m *IntStrMap) MapStrAny() map[string]interface{}
- func (m IntStrMap) MarshalJSON() ([]byte, error)
- func (m *IntStrMap) Merge(other *IntStrMap)
- func (m *IntStrMap) Pop() (key int, value string)
- func (m *IntStrMap) Pops(size int) map[int]string
- func (m *IntStrMap) RLockFunc(f func(m map[int]string))
- func (m *IntStrMap) Remove(key int) (value string)
- func (m *IntStrMap) Removes(keys []int)
- func (m *IntStrMap) Replace(data map[int]string)
- func (m *IntStrMap) Search(key int) (value string, found bool)
- func (m *IntStrMap) Set(key int, val string)
- func (m *IntStrMap) SetIfNotExist(key int, value string) bool
- func (m *IntStrMap) SetIfNotExistFunc(key int, f func() string) bool
- func (m *IntStrMap) SetIfNotExistFuncLock(key int, f func() string) bool
- func (m *IntStrMap) Sets(data map[int]string)
- func (m *IntStrMap) Size() int
- func (m *IntStrMap) String() string
- func (m *IntStrMap) UnmarshalJSON(b []byte) error
- func (m *IntStrMap) UnmarshalValue(value interface{}) (err error)
- func (m *IntStrMap) Values() []string
- type ListMap
- func (m *ListMap) Clear()
- func (m *ListMap) Clone(safe ...bool) *ListMap
- func (m *ListMap) Contains(key interface{}) (ok bool)
- func (m *ListMap) DeepCopy() interface{}
- func (m *ListMap) FilterEmpty()
- func (m *ListMap) Flip()
- func (m *ListMap) Get(key interface{}) (value interface{})
- func (m *ListMap) GetOrSet(key interface{}, value interface{}) interface{}
- func (m *ListMap) GetOrSetFunc(key interface{}, f func() interface{}) interface{}
- func (m *ListMap) GetOrSetFuncLock(key interface{}, f func() interface{}) interface{}
- func (m *ListMap) GetVar(key interface{}) *gvar.Var
- func (m *ListMap) GetVarOrSet(key interface{}, value interface{}) *gvar.Var
- func (m *ListMap) GetVarOrSetFunc(key interface{}, f func() interface{}) *gvar.Var
- func (m *ListMap) GetVarOrSetFuncLock(key interface{}, f func() interface{}) *gvar.Var
- func (m *ListMap) IsEmpty() bool
- func (m *ListMap) Iterator(f func(key, value interface{}) bool)
- func (m *ListMap) IteratorAsc(f func(key interface{}, value interface{}) bool)
- func (m *ListMap) IteratorDesc(f func(key interface{}, value interface{}) bool)
- func (m *ListMap) Keys() []interface{}
- func (m *ListMap) Map() map[interface{}]interface{}
- func (m *ListMap) MapStrAny() map[string]interface{}
- func (m ListMap) MarshalJSON() (jsonBytes []byte, err error)
- func (m *ListMap) Merge(other *ListMap)
- func (m *ListMap) Pop() (key, value interface{})
- func (m *ListMap) Pops(size int) map[interface{}]interface{}
- func (m *ListMap) Remove(key interface{}) (value interface{})
- func (m *ListMap) Removes(keys []interface{})
- func (m *ListMap) Replace(data map[interface{}]interface{})
- func (m *ListMap) Search(key interface{}) (value interface{}, found bool)
- func (m *ListMap) Set(key interface{}, value interface{})
- func (m *ListMap) SetIfNotExist(key interface{}, value interface{}) bool
- func (m *ListMap) SetIfNotExistFunc(key interface{}, f func() interface{}) bool
- func (m *ListMap) SetIfNotExistFuncLock(key interface{}, f func() interface{}) bool
- func (m *ListMap) Sets(data map[interface{}]interface{})
- func (m *ListMap) Size() (size int)
- func (m *ListMap) String() string
- func (m *ListMap) UnmarshalJSON(b []byte) error
- func (m *ListMap) UnmarshalValue(value interface{}) (err error)
- func (m *ListMap) Values() []interface{}
- type Map
- type StrAnyMap
- func (m *StrAnyMap) Clear()
- func (m *StrAnyMap) Clone() *StrAnyMap
- func (m *StrAnyMap) Contains(key string) bool
- func (m *StrAnyMap) DeepCopy() interface{}
- func (m *StrAnyMap) Diff(other *StrAnyMap) (addedKeys, removedKeys, updatedKeys []string)
- func (m *StrAnyMap) FilterEmpty()
- func (m *StrAnyMap) FilterNil()
- func (m *StrAnyMap) Flip()
- func (m *StrAnyMap) Get(key string) (value interface{})
- func (m *StrAnyMap) GetOrSet(key string, value interface{}) interface{}
- func (m *StrAnyMap) GetOrSetFunc(key string, f func() interface{}) interface{}
- func (m *StrAnyMap) GetOrSetFuncLock(key string, f func() interface{}) interface{}
- func (m *StrAnyMap) GetVar(key string) *gvar.Var
- func (m *StrAnyMap) GetVarOrSet(key string, value interface{}) *gvar.Var
- func (m *StrAnyMap) GetVarOrSetFunc(key string, f func() interface{}) *gvar.Var
- func (m *StrAnyMap) GetVarOrSetFuncLock(key string, f func() interface{}) *gvar.Var
- func (m *StrAnyMap) IsEmpty() bool
- func (m *StrAnyMap) IsSubOf(other *StrAnyMap) bool
- func (m *StrAnyMap) Iterator(f func(k string, v interface{}) bool)
- func (m *StrAnyMap) Keys() []string
- func (m *StrAnyMap) LockFunc(f func(m map[string]interface{}))
- func (m *StrAnyMap) Map() map[string]interface{}
- func (m *StrAnyMap) MapCopy() map[string]interface{}
- func (m *StrAnyMap) MapStrAny() map[string]interface{}
- func (m StrAnyMap) MarshalJSON() ([]byte, error)
- func (m *StrAnyMap) Merge(other *StrAnyMap)
- func (m *StrAnyMap) Pop() (key string, value interface{})
- func (m *StrAnyMap) Pops(size int) map[string]interface{}
- func (m *StrAnyMap) RLockFunc(f func(m map[string]interface{}))
- func (m *StrAnyMap) Remove(key string) (value interface{})
- func (m *StrAnyMap) Removes(keys []string)
- func (m *StrAnyMap) Replace(data map[string]interface{})
- func (m *StrAnyMap) Search(key string) (value interface{}, found bool)
- func (m *StrAnyMap) Set(key string, val interface{})
- func (m *StrAnyMap) SetIfNotExist(key string, value interface{}) bool
- func (m *StrAnyMap) SetIfNotExistFunc(key string, f func() interface{}) bool
- func (m *StrAnyMap) SetIfNotExistFuncLock(key string, f func() interface{}) bool
- func (m *StrAnyMap) Sets(data map[string]interface{})
- func (m *StrAnyMap) Size() int
- func (m *StrAnyMap) String() string
- func (m *StrAnyMap) UnmarshalJSON(b []byte) error
- func (m *StrAnyMap) UnmarshalValue(value interface{}) (err error)
- func (m *StrAnyMap) Values() []interface{}
- type StrIntMap
- func (m *StrIntMap) Clear()
- func (m *StrIntMap) Clone() *StrIntMap
- func (m *StrIntMap) Contains(key string) bool
- func (m *StrIntMap) DeepCopy() interface{}
- func (m *StrIntMap) Diff(other *StrIntMap) (addedKeys, removedKeys, updatedKeys []string)
- func (m *StrIntMap) FilterEmpty()
- func (m *StrIntMap) Flip()
- func (m *StrIntMap) Get(key string) (value int)
- func (m *StrIntMap) GetOrSet(key string, value int) int
- func (m *StrIntMap) GetOrSetFunc(key string, f func() int) int
- func (m *StrIntMap) GetOrSetFuncLock(key string, f func() int) int
- func (m *StrIntMap) IsEmpty() bool
- func (m *StrIntMap) IsSubOf(other *StrIntMap) bool
- func (m *StrIntMap) Iterator(f func(k string, v int) bool)
- func (m *StrIntMap) Keys() []string
- func (m *StrIntMap) LockFunc(f func(m map[string]int))
- func (m *StrIntMap) Map() map[string]int
- func (m *StrIntMap) MapCopy() map[string]int
- func (m *StrIntMap) MapStrAny() map[string]interface{}
- func (m StrIntMap) MarshalJSON() ([]byte, error)
- func (m *StrIntMap) Merge(other *StrIntMap)
- func (m *StrIntMap) Pop() (key string, value int)
- func (m *StrIntMap) Pops(size int) map[string]int
- func (m *StrIntMap) RLockFunc(f func(m map[string]int))
- func (m *StrIntMap) Remove(key string) (value int)
- func (m *StrIntMap) Removes(keys []string)
- func (m *StrIntMap) Replace(data map[string]int)
- func (m *StrIntMap) Search(key string) (value int, found bool)
- func (m *StrIntMap) Set(key string, val int)
- func (m *StrIntMap) SetIfNotExist(key string, value int) bool
- func (m *StrIntMap) SetIfNotExistFunc(key string, f func() int) bool
- func (m *StrIntMap) SetIfNotExistFuncLock(key string, f func() int) bool
- func (m *StrIntMap) Sets(data map[string]int)
- func (m *StrIntMap) Size() int
- func (m *StrIntMap) String() string
- func (m *StrIntMap) UnmarshalJSON(b []byte) error
- func (m *StrIntMap) UnmarshalValue(value interface{}) (err error)
- func (m *StrIntMap) Values() []int
- type StrStrMap
- func (m *StrStrMap) Clear()
- func (m *StrStrMap) Clone() *StrStrMap
- func (m *StrStrMap) Contains(key string) bool
- func (m *StrStrMap) DeepCopy() interface{}
- func (m *StrStrMap) Diff(other *StrStrMap) (addedKeys, removedKeys, updatedKeys []string)
- func (m *StrStrMap) FilterEmpty()
- func (m *StrStrMap) Flip()
- func (m *StrStrMap) Get(key string) (value string)
- func (m *StrStrMap) GetOrSet(key string, value string) string
- func (m *StrStrMap) GetOrSetFunc(key string, f func() string) string
- func (m *StrStrMap) GetOrSetFuncLock(key string, f func() string) string
- func (m *StrStrMap) IsEmpty() bool
- func (m *StrStrMap) IsSubOf(other *StrStrMap) bool
- func (m *StrStrMap) Iterator(f func(k string, v string) bool)
- func (m *StrStrMap) Keys() []string
- func (m *StrStrMap) LockFunc(f func(m map[string]string))
- func (m *StrStrMap) Map() map[string]string
- func (m *StrStrMap) MapCopy() map[string]string
- func (m *StrStrMap) MapStrAny() map[string]interface{}
- func (m StrStrMap) MarshalJSON() ([]byte, error)
- func (m *StrStrMap) Merge(other *StrStrMap)
- func (m *StrStrMap) Pop() (key, value string)
- func (m *StrStrMap) Pops(size int) map[string]string
- func (m *StrStrMap) RLockFunc(f func(m map[string]string))
- func (m *StrStrMap) Remove(key string) (value string)
- func (m *StrStrMap) Removes(keys []string)
- func (m *StrStrMap) Replace(data map[string]string)
- func (m *StrStrMap) Search(key string) (value string, found bool)
- func (m *StrStrMap) Set(key string, val string)
- func (m *StrStrMap) SetIfNotExist(key string, value string) bool
- func (m *StrStrMap) SetIfNotExistFunc(key string, f func() string) bool
- func (m *StrStrMap) SetIfNotExistFuncLock(key string, f func() string) bool
- func (m *StrStrMap) Sets(data map[string]string)
- func (m *StrStrMap) Size() int
- func (m *StrStrMap) String() string
- func (m *StrStrMap) UnmarshalJSON(b []byte) error
- func (m *StrStrMap) UnmarshalValue(value interface{}) (err error)
- func (m *StrStrMap) Values() []string
- type TreeMap
Examples ¶
- AnyAnyMap.Clear
- AnyAnyMap.Clone
- AnyAnyMap.Contains
- AnyAnyMap.FilterEmpty
- AnyAnyMap.FilterNil
- AnyAnyMap.Flip
- AnyAnyMap.Get
- AnyAnyMap.GetOrSet
- AnyAnyMap.GetOrSetFunc
- AnyAnyMap.GetOrSetFuncLock
- AnyAnyMap.GetVar
- AnyAnyMap.GetVarOrSet
- AnyAnyMap.GetVarOrSetFunc
- AnyAnyMap.GetVarOrSetFuncLock
- AnyAnyMap.IsEmpty
- AnyAnyMap.Iterator
- AnyAnyMap.Keys
- AnyAnyMap.LockFunc
- AnyAnyMap.Map
- AnyAnyMap.MapCopy
- AnyAnyMap.MapStrAny
- AnyAnyMap.MarshalJSON
- AnyAnyMap.Merge
- AnyAnyMap.Pop
- AnyAnyMap.Pops
- AnyAnyMap.RLockFunc
- AnyAnyMap.Remove
- AnyAnyMap.Removes
- AnyAnyMap.Replace
- AnyAnyMap.Search
- AnyAnyMap.Set
- AnyAnyMap.SetIfNotExist
- AnyAnyMap.SetIfNotExistFunc
- AnyAnyMap.SetIfNotExistFuncLock
- AnyAnyMap.Sets
- AnyAnyMap.Size
- AnyAnyMap.String
- AnyAnyMap.UnmarshalJSON
- AnyAnyMap.UnmarshalValue
- AnyAnyMap.Values
- IntAnyMap.Clear
- IntAnyMap.Clone
- IntAnyMap.Contains
- IntAnyMap.FilterEmpty
- IntAnyMap.FilterNil
- IntAnyMap.Flip
- IntAnyMap.Get
- IntAnyMap.GetOrSet
- IntAnyMap.GetOrSetFunc
- IntAnyMap.GetOrSetFuncLock
- IntAnyMap.GetVar
- IntAnyMap.GetVarOrSet
- IntAnyMap.GetVarOrSetFunc
- IntAnyMap.GetVarOrSetFuncLock
- IntAnyMap.IsEmpty
- IntAnyMap.Iterator
- IntAnyMap.Keys
- IntAnyMap.LockFunc
- IntAnyMap.Map
- IntAnyMap.MapCopy
- IntAnyMap.MapStrAny
- IntAnyMap.MarshalJSON
- IntAnyMap.Merge
- IntAnyMap.Pop
- IntAnyMap.Pops
- IntAnyMap.RLockFunc
- IntAnyMap.Remove
- IntAnyMap.Removes
- IntAnyMap.Replace
- IntAnyMap.Search
- IntAnyMap.Set
- IntAnyMap.SetIfNotExist
- IntAnyMap.SetIfNotExistFunc
- IntAnyMap.SetIfNotExistFuncLock
- IntAnyMap.Sets
- IntAnyMap.Size
- IntAnyMap.String
- IntAnyMap.UnmarshalJSON
- IntAnyMap.UnmarshalValue
- IntAnyMap.Values
- IntIntMap.Clear
- IntIntMap.Clone
- IntIntMap.Contains
- IntIntMap.FilterEmpty
- IntIntMap.Flip
- IntIntMap.Get
- IntIntMap.GetOrSet
- IntIntMap.GetOrSetFunc
- IntIntMap.GetOrSetFuncLock
- IntIntMap.IsEmpty
- IntIntMap.Iterator
- IntIntMap.Keys
- IntIntMap.LockFunc
- IntIntMap.Map
- IntIntMap.MapCopy
- IntIntMap.MapStrAny
- IntIntMap.MarshalJSON
- IntIntMap.Merge
- IntIntMap.Pop
- IntIntMap.Pops
- IntIntMap.RLockFunc
- IntIntMap.Remove
- IntIntMap.Removes
- IntIntMap.Replace
- IntIntMap.Search
- IntIntMap.Set
- IntIntMap.SetIfNotExist
- IntIntMap.SetIfNotExistFunc
- IntIntMap.SetIfNotExistFuncLock
- IntIntMap.Sets
- IntIntMap.Size
- IntIntMap.String
- IntIntMap.UnmarshalJSON
- IntIntMap.UnmarshalValue
- IntIntMap.Values
- ListMap.Clear
- ListMap.Clone
- ListMap.Contains
- ListMap.FilterEmpty
- ListMap.Flip
- ListMap.Get
- ListMap.GetOrSet
- ListMap.GetOrSetFunc
- ListMap.GetOrSetFuncLock
- ListMap.GetVar
- ListMap.GetVarOrSet
- ListMap.GetVarOrSetFunc
- ListMap.GetVarOrSetFuncLock
- ListMap.IsEmpty
- ListMap.Iterator
- ListMap.IteratorAsc
- ListMap.IteratorDesc
- ListMap.Keys
- ListMap.Map
- ListMap.MapStrAny
- ListMap.MarshalJSON
- ListMap.Merge
- ListMap.Pop
- ListMap.Pops
- ListMap.Remove
- ListMap.Removes
- ListMap.Replace
- ListMap.Search
- ListMap.Set
- ListMap.SetIfNotExist
- ListMap.SetIfNotExistFunc
- ListMap.SetIfNotExistFuncLock
- ListMap.Sets
- ListMap.Size
- ListMap.String
- ListMap.UnmarshalJSON
- ListMap.UnmarshalValue
- ListMap.Values
- New
- NewAnyAnyMap
- NewAnyAnyMapFrom
- NewFrom
- NewHashMap
- NewHashMapFrom
- NewIntAnyMap
- NewIntAnyMapFrom
- NewIntIntMap
- NewIntIntMapFrom
- NewListMap
- NewListMapFrom
- NewStrAnyMap
- NewStrAnyMapFrom
- NewStrIntMap
- NewStrIntMapFrom
- NewStrStrMap
- NewStrStrMapFrom
- NewTreeMap
- NewTreeMapFrom
- StrAnyMap.Clear
- StrAnyMap.Clone
- StrAnyMap.Contains
- StrAnyMap.FilterEmpty
- StrAnyMap.FilterNil
- StrAnyMap.Flip
- StrAnyMap.Get
- StrAnyMap.GetOrSet
- StrAnyMap.GetOrSetFunc
- StrAnyMap.GetOrSetFuncLock
- StrAnyMap.GetVar
- StrAnyMap.GetVarOrSet
- StrAnyMap.GetVarOrSetFunc
- StrAnyMap.GetVarOrSetFuncLock
- StrAnyMap.IsEmpty
- StrAnyMap.Iterator
- StrAnyMap.Keys
- StrAnyMap.LockFunc
- StrAnyMap.Map
- StrAnyMap.MapCopy
- StrAnyMap.MapStrAny
- StrAnyMap.MarshalJSON
- StrAnyMap.Merge
- StrAnyMap.Pop
- StrAnyMap.Pops
- StrAnyMap.RLockFunc
- StrAnyMap.Remove
- StrAnyMap.Removes
- StrAnyMap.Replace
- StrAnyMap.Search
- StrAnyMap.Set
- StrAnyMap.SetIfNotExist
- StrAnyMap.SetIfNotExistFunc
- StrAnyMap.SetIfNotExistFuncLock
- StrAnyMap.Sets
- StrAnyMap.Size
- StrAnyMap.String
- StrAnyMap.UnmarshalJSON
- StrAnyMap.UnmarshalValue
- StrAnyMap.Values
- StrIntMap.Clear
- StrIntMap.Clone
- StrIntMap.Contains
- StrIntMap.FilterEmpty
- StrIntMap.Flip
- StrIntMap.Get
- StrIntMap.GetOrSet
- StrIntMap.GetOrSetFunc
- StrIntMap.GetOrSetFuncLock
- StrIntMap.IsEmpty
- StrIntMap.Iterator
- StrIntMap.Keys
- StrIntMap.LockFunc
- StrIntMap.Map
- StrIntMap.MapCopy
- StrIntMap.MapStrAny
- StrIntMap.MarshalJSON
- StrIntMap.Merge
- StrIntMap.Pop
- StrIntMap.Pops
- StrIntMap.RLockFunc
- StrIntMap.Remove
- StrIntMap.Removes
- StrIntMap.Replace
- StrIntMap.Search
- StrIntMap.Set
- StrIntMap.SetIfNotExist
- StrIntMap.SetIfNotExistFunc
- StrIntMap.SetIfNotExistFuncLock
- StrIntMap.Sets
- StrIntMap.Size
- StrIntMap.String
- StrIntMap.UnmarshalJSON
- StrIntMap.UnmarshalValue
- StrIntMap.Values
- StrStrMap.Clear
- StrStrMap.Clone
- StrStrMap.Contains
- StrStrMap.FilterEmpty
- StrStrMap.Flip
- StrStrMap.Get
- StrStrMap.GetOrSet
- StrStrMap.GetOrSetFunc
- StrStrMap.GetOrSetFuncLock
- StrStrMap.IsEmpty
- StrStrMap.Iterator
- StrStrMap.Keys
- StrStrMap.LockFunc
- StrStrMap.Map
- StrStrMap.MapCopy
- StrStrMap.MapStrAny
- StrStrMap.MarshalJSON
- StrStrMap.Merge
- StrStrMap.Pop
- StrStrMap.Pops
- StrStrMap.RLockFunc
- StrStrMap.Remove
- StrStrMap.Removes
- StrStrMap.Replace
- StrStrMap.Search
- StrStrMap.Set
- StrStrMap.SetIfNotExist
- StrStrMap.SetIfNotExistFunc
- StrStrMap.SetIfNotExistFuncLock
- StrStrMap.Sets
- StrStrMap.Size
- StrStrMap.String
- StrStrMap.UnmarshalJSON
- StrStrMap.UnmarshalValue
- StrStrMap.Values
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AnyAnyMap ¶
type AnyAnyMap struct {
// contains filtered or unexported fields
}
AnyAnyMap wraps map type `map[interface{}]interface{}` and provides more map features.
func NewAnyAnyMap ¶
NewAnyAnyMap creates and returns an empty hash map. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewAnyAnyMap() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func NewAnyAnyMapFrom ¶
NewAnyAnyMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewAnyAnyMap() m.Set("key1", "val1") fmt.Println(m) n := gmap.NewAnyAnyMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func (*AnyAnyMap) Clear ¶
func (m *AnyAnyMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*AnyAnyMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func (*AnyAnyMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Contains("k1")) fmt.Println(m.Contains("k5")) }
Output: true false
func (*AnyAnyMap) DeepCopy ¶
func (m *AnyAnyMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*AnyAnyMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*AnyAnyMap) FilterEmpty ¶
func (m *AnyAnyMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewFrom(g.MapAnyAny{ "k1": "", "k2": nil, "k3": 0, "k4": 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[k4:1]
func (*AnyAnyMap) FilterNil ¶
func (m *AnyAnyMap) FilterNil()
FilterNil deletes all key-value pair of which the value is nil.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewFrom(g.MapAnyAny{ "k1": "", "k2": nil, "k3": 0, "k4": 1, }) m.FilterNil() fmt.Printf("%#v", m.Map()) }
Output: map[interface {}]interface {}{"k1":"", "k3":0, "k4":1}
func (*AnyAnyMap) Flip ¶
func (m *AnyAnyMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", }) m.Flip() fmt.Println(m.Map()) }
Output: map[v1:k1]
func (*AnyAnyMap) Get ¶
func (m *AnyAnyMap) Get(key interface{}) (value interface{})
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println("key1 value:", m.Get("key1")) fmt.Println("key2 value:", m.Get("key2")) }
Output: key1 value: val1 key2 value: <nil>
func (*AnyAnyMap) GetOrSet ¶
func (m *AnyAnyMap) GetOrSet(key interface{}, value interface{}) interface{}
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetOrSet("key1", "NotExistValue")) fmt.Println(m.GetOrSet("key2", "val2")) }
Output: val1 val2
func (*AnyAnyMap) GetOrSetFunc ¶
func (m *AnyAnyMap) GetOrSetFunc(key interface{}, f func() interface{}) interface{}
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*AnyAnyMap) GetOrSetFuncLock ¶
func (m *AnyAnyMap) GetOrSetFuncLock(key interface{}, f func() interface{}) interface{}
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*AnyAnyMap) GetVar ¶
GetVar returns a Var with the value by given `key`. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetVar("key1")) fmt.Println(m.GetVar("key2").IsNil()) }
Output: val1 true
func (*AnyAnyMap) GetVarOrSet ¶
GetVarOrSet returns a Var with result from GetOrSet. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetVarOrSet("key1", "NotExistValue")) fmt.Println(m.GetVarOrSet("key2", "val2")) }
Output: val1 val2
func (*AnyAnyMap) GetVarOrSetFunc ¶
GetVarOrSetFunc returns a Var with result from GetOrSetFunc. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*AnyAnyMap) GetVarOrSetFuncLock ¶
GetVarOrSetFuncLock returns a Var with result from GetOrSetFuncLock. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*AnyAnyMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.Map fmt.Println(m.IsEmpty()) m.Set("k1", "v1") fmt.Println(m.IsEmpty()) }
Output: true false
func (*AnyAnyMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.Iterator(func(k interface{}, v interface{}) bool { totalKey += k.(int) totalValue += v.(int) return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) // May Output: // totalKey: 11 // totalValue: 22 }
Output:
func (*AnyAnyMap) Keys ¶
func (m *AnyAnyMap) Keys() []interface{}
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Keys()) // May Output: // [k1 k2 k3 k4] }
Output:
func (*AnyAnyMap) LockFunc ¶
func (m *AnyAnyMap) LockFunc(f func(m map[interface{}]interface{}))
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.LockFunc(func(m map[interface{}]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*AnyAnyMap) Map ¶
func (m *AnyAnyMap) Map() map[interface{}]interface{}
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.New() m1.Set("key1", "val1") fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set("key1", "val2") fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.New(true) m2.Set("key1", "val1") fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set("key1", "val2") fmt.Println("after n2:", n2) }
Output: m1: {"key1":"val1"} before n1: map[key1:val1] after n1: map[key1:val2] m2: {"key1":"val1"} before n2: map[key1:val1] after n2: map[key1:val1]
func (*AnyAnyMap) MapCopy ¶
func (m *AnyAnyMap) MapCopy() map[interface{}]interface{}
MapCopy returns a shallow copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") m.Set("key2", "val2") fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"key1":"val1","key2":"val2"} map[key1:val1 key2:val2]
func (*AnyAnyMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set(1001, "val1") m.Set(1002, "val2") n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"1001":"val1", "1002":"val2"}
func (AnyAnyMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}
func (*AnyAnyMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.Map m1.Set("key1", "val1") m2.Set("key2", "val2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:val1 key2:val2] }
Output:
func (*AnyAnyMap) Pop ¶
func (m *AnyAnyMap) Pop() (key, value interface{})
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pop()) // May Output: // k1 v1 }
Output:
func (*AnyAnyMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[k1:v1 k2:v2 k3:v3 k4:v4] // size: 0 // map[k1:v1 k2:v2] // size: 2 }
Output:
func (*AnyAnyMap) RLockFunc ¶
func (m *AnyAnyMap) RLockFunc(f func(m map[interface{}]interface{}))
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.RLockFunc(func(m map[interface{}]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*AnyAnyMap) Remove ¶
func (m *AnyAnyMap) Remove(key interface{}) (value interface{})
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.Map m.Set("k1", "v1") fmt.Println(m.Remove("k1")) fmt.Println(m.Remove("k2")) fmt.Println(m.Size()) }
Output: v1 <nil> 0
func (*AnyAnyMap) Removes ¶
func (m *AnyAnyMap) Removes(keys []interface{})
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) removeList := make([]interface{}, 2) removeList = append(removeList, "k1") removeList = append(removeList, "k2") m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[k3:v3 k4:v4]
func (*AnyAnyMap) Replace ¶
func (m *AnyAnyMap) Replace(data map[interface{}]interface{})
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", }) var n gmap.Map n.Sets(g.MapAnyAny{ "k2": "v2", }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set("k2", "v1") fmt.Println(m.Map()) }
Output: map[k1:v1] map[k2:v2] map[k2:v1]
func (*AnyAnyMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") value, found := m.Search("key1") if found { fmt.Println("find key1 value:", value) } value, found = m.Search("key2") if !found { fmt.Println("key2 not find") } }
Output: find key1 value: val1 key2 not find
func (*AnyAnyMap) Set ¶
func (m *AnyAnyMap) Set(key interface{}, value interface{})
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func (*AnyAnyMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.Map fmt.Println(m.SetIfNotExist("k1", "v1")) fmt.Println(m.SetIfNotExist("k1", "v2")) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*AnyAnyMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.Map fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*AnyAnyMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.Map fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*AnyAnyMap) Sets ¶
func (m *AnyAnyMap) Sets(data map[interface{}]interface{})
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() addMap := make(map[interface{}]interface{}) addMap["key1"] = "val1" addMap["key2"] = "val2" addMap["key3"] = "val3" m.Sets(addMap) fmt.Println(m) }
Output: {"key1":"val1","key2":"val2","key3":"val3"}
func (*AnyAnyMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Size()) }
Output: 4
func (*AnyAnyMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", }) fmt.Println(m.String()) var m1 *gmap.Map = nil fmt.Println(len(m1.String())) }
Output: {"k1":"v1"} 0
func (*AnyAnyMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) var n gmap.Map err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[k1:v1 k2:v2 k3:v3 k4:v4]
func (*AnyAnyMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { type User struct { Uid int Name string Pass1 string `gconv:"password1"` Pass2 string `gconv:"password2"` } var ( m gmap.AnyAnyMap user = User{ Uid: 1, Name: "john", Pass1: "123", Pass2: "456", } ) if err := gconv.Scan(user, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[interface {}]interface {}{"Name":"john", "Uid":1, "password1":"123", "password2":"456"}
func (*AnyAnyMap) Values ¶
func (m *AnyAnyMap) Values() []interface{}
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.Map m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Values()) // May Output: // [v1 v2 v3 v4] }
Output:
type IntAnyMap ¶
type IntAnyMap struct {
// contains filtered or unexported fields
}
IntAnyMap implements map[int]interface{} with RWMutex that has switch.
func NewIntAnyMap ¶
NewIntAnyMap returns an empty IntAnyMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m) }
Output: {"1":"val1"}
func NewIntAnyMapFrom ¶
NewIntAnyMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m) n := gmap.NewIntAnyMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"1":"val1"} {"1":"val1"}
func (*IntAnyMap) Clear ¶
func (m *IntAnyMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*IntAnyMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"1":"val1"} {"1":"val1"}
func (*IntAnyMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Contains(1)) fmt.Println(m.Contains(5)) }
Output: true false
func (*IntAnyMap) DeepCopy ¶
func (m *IntAnyMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*IntAnyMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*IntAnyMap) FilterEmpty ¶
func (m *IntAnyMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewIntAnyMapFrom(g.MapIntAny{ 1: "", 2: nil, 3: 0, 4: 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[4:1]
func (*IntAnyMap) FilterNil ¶
func (m *IntAnyMap) FilterNil()
FilterNil deletes all key-value pair of which the value is nil.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewIntAnyMapFrom(g.MapIntAny{ 1: "", 2: nil, 3: 0, 4: 1, }) m.FilterNil() fmt.Printf("%#v", m.Map()) }
Output: map[int]interface {}{1:"", 3:0, 4:1}
func (*IntAnyMap) Flip ¶
func (m *IntAnyMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: 10, }) m.Flip() fmt.Println(m.Map()) }
Output: map[10:1]
func (*IntAnyMap) Get ¶
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println("key1 value:", m.Get(1)) fmt.Println("key2 value:", m.Get(2)) }
Output: key1 value: val1 key2 value: <nil>
func (*IntAnyMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetOrSet(1, "NotExistValue")) fmt.Println(m.GetOrSet(2, "val2")) }
Output: val1 val2
func (*IntAnyMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetOrSetFunc(1, func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFunc(2, func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*IntAnyMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetOrSetFuncLock(1, func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFuncLock(2, func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*IntAnyMap) GetVar ¶
GetVar returns a Var with the value by given `key`. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetVar(1)) fmt.Println(m.GetVar(2).IsNil()) }
Output: val1 true
func (*IntAnyMap) GetVarOrSet ¶
GetVarOrSet returns a Var with result from GetVarOrSet. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetVarOrSet(1, "NotExistValue")) fmt.Println(m.GetVarOrSet(2, "val2")) }
Output: val1 val2
func (*IntAnyMap) GetVarOrSetFunc ¶
GetVarOrSetFunc returns a Var with result from GetOrSetFunc. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetVarOrSetFunc(1, func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFunc(2, func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*IntAnyMap) GetVarOrSetFuncLock ¶
GetVarOrSetFuncLock returns a Var with result from GetOrSetFuncLock. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m.GetVarOrSetFuncLock(1, func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFuncLock(2, func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*IntAnyMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntAnyMap fmt.Println(m.IsEmpty()) m.Set(1, "v1") fmt.Println(m.IsEmpty()) }
Output: true false
func (*IntAnyMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.Iterator(func(k int, v interface{}) bool { totalKey += k totalValue += v.(int) return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) // May Output: // totalKey: 11 // totalValue: 22 }
Output:
func (*IntAnyMap) Keys ¶
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Keys()) // May Output: // [1 2 3 4] }
Output:
func (*IntAnyMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: 1, 2: 2, 3: 3, 4: 4, }) m.LockFunc(func(m map[int]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*IntAnyMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.NewIntAnyMap() m1.Set(1, "val1") fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set(1, "val2") fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.New(true) m2.Set(1, "val1") fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set(1, "val2") fmt.Println("after n2:", n2) }
Output: m1: {"1":"val1"} before n1: map[1:val1] after n1: map[1:val2] m2: {"1":"val1"} before n2: map[1:val1] after n2: map[1:val1]
func (*IntAnyMap) MapCopy ¶
MapCopy returns a copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") m.Set(2, "val2") fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"1":"val1","2":"val2"} map[1:val1 2:val2]
func (*IntAnyMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1001, "val1") m.Set(1002, "val2") n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"1001":"val1", "1002":"val2"}
func (IntAnyMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"1":"v1","2":"v2","3":"v3","4":"v4"}
func (*IntAnyMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.Map m1.Set(1, "val1") m2.Set(2, "val2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:val1 key2:val2] }
Output:
func (*IntAnyMap) Pop ¶
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Pop()) // May Output: // 1 v1 }
Output:
func (*IntAnyMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[1:v1 2:v2 3:v3 4:v4] // size: 0 // map[1:v1 2:v2] // size: 2 }
Output:
func (*IntAnyMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: 1, 2: 2, 3: 3, 4: 4, }) m.RLockFunc(func(m map[int]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*IntAnyMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntAnyMap m.Set(1, "v1") fmt.Println(m.Remove(1)) fmt.Println(m.Remove(2)) fmt.Println(m.Size()) }
Output: v1 <nil> 0
func (*IntAnyMap) Removes ¶
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) removeList := make([]int, 2) removeList = append(removeList, 1) removeList = append(removeList, 2) m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[3:v3 4:v4]
func (*IntAnyMap) Replace ¶
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", }) var n gmap.IntAnyMap n.Sets(g.MapIntAny{ 2: "v2", }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set(2, "v1") fmt.Println(m.Map()) }
Output: map[1:v1] map[2:v2] map[2:v1]
func (*IntAnyMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") value, found := m.Search(1) if found { fmt.Println("find key1 value:", value) } value, found = m.Search(2) if !found { fmt.Println("key2 not find") } }
Output: find key1 value: val1 key2 not find
func (*IntAnyMap) Set ¶
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() m.Set(1, "val1") fmt.Println(m) }
Output: {"1":"val1"}
func (*IntAnyMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntAnyMap fmt.Println(m.SetIfNotExist(1, "v1")) fmt.Println(m.SetIfNotExist(1, "v2")) fmt.Println(m.Map()) }
Output: true false map[1:v1]
func (*IntAnyMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntAnyMap fmt.Println(m.SetIfNotExistFunc(1, func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFunc(1, func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[1:v1]
func (*IntAnyMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntAnyMap fmt.Println(m.SetIfNotExistFuncLock(1, func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFuncLock(1, func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[1:v1]
func (*IntAnyMap) Sets ¶
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntAnyMap() addMap := make(map[int]interface{}) addMap[1] = "val1" addMap[2] = "val2" addMap[3] = "val3" m.Sets(addMap) fmt.Println(m) }
Output: {"1":"val1","2":"val2","3":"val3"}
func (*IntAnyMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Size()) }
Output: 4
func (*IntAnyMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", }) fmt.Println(m.String()) var m1 *gmap.IntAnyMap = nil fmt.Println(len(m1.String())) }
Output: {"1":"v1"} 0
func (*IntAnyMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) var n gmap.Map err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[1:v1 2:v2 3:v3 4:v4]
func (*IntAnyMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntAnyMap goWeb := map[int]interface{}{ 1: "goxrc", 2: "gin", 3: "echo", } if err := gconv.Scan(goWeb, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[int]interface {}{1:"goxrc", 2:"gin", 3:"echo"}
func (*IntAnyMap) Values ¶
func (m *IntAnyMap) Values() []interface{}
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntAnyMap m.Sets(g.MapIntAny{ 1: "v1", 2: "v2", 3: "v3", 4: "v4", }) fmt.Println(m.Values()) // May Output: // [v1 v2 v3 v4] }
Output:
type IntIntMap ¶
type IntIntMap struct {
// contains filtered or unexported fields
}
IntIntMap implements map[int]int with RWMutex that has switch.
func NewIntIntMap ¶
NewIntIntMap returns an empty IntIntMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m) }
Output: {"1":1}
func NewIntIntMapFrom ¶
NewIntIntMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m) n := gmap.NewIntIntMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"1":1} {"1":1}
func (*IntIntMap) Clear ¶
func (m *IntIntMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*IntIntMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"1":1} {"1":1}
func (*IntIntMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Contains(1)) fmt.Println(m.Contains(5)) }
Output: true false
func (*IntIntMap) DeepCopy ¶
func (m *IntIntMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*IntIntMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*IntIntMap) FilterEmpty ¶
func (m *IntIntMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewIntIntMapFrom(g.MapIntInt{ 1: 0, 2: 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[2:1]
func (*IntIntMap) Flip ¶
func (m *IntIntMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 10, }) m.Flip() fmt.Println(m.Map()) }
Output: map[10:1]
func (*IntIntMap) Get ¶
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println("key1 value:", m.Get(1)) fmt.Println("key2 value:", m.Get(2)) }
Output: key1 value: 1 key2 value: 0
func (*IntIntMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m.GetOrSet(1, 0)) fmt.Println(m.GetOrSet(2, 2)) }
Output: 1 2
func (*IntIntMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m.GetOrSetFunc(1, func() int { return 0 })) fmt.Println(m.GetOrSetFunc(2, func() int { return 0 })) }
Output: 1 0
func (*IntIntMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m.GetOrSetFuncLock(1, func() int { return 0 })) fmt.Println(m.GetOrSetFuncLock(2, func() int { return 0 })) }
Output: 1 0
func (*IntIntMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntIntMap fmt.Println(m.IsEmpty()) m.Set(1, 1) fmt.Println(m.IsEmpty()) }
Output: true false
func (*IntIntMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.Iterator(func(k int, v int) bool { totalKey += k totalValue += v return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) // May Output: // totalKey: 11 // totalValue: 22 }
Output:
func (*IntIntMap) Keys ¶
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Keys()) // May Output: // [1 2 3 4] }
Output:
func (*IntIntMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) m.LockFunc(func(m map[int]int) { totalValue := 0 for _, v := range m { totalValue += v } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*IntIntMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.NewIntIntMap() m1.Set(1, 1) fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set(1, 2) fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.New(true) m2.Set(1, "1") fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set(1, "2") fmt.Println("after n2:", n2) }
Output: m1: {"1":1} before n1: map[1:1] after n1: map[1:2] m2: {"1":"1"} before n2: map[1:1] after n2: map[1:1]
func (*IntIntMap) MapCopy ¶
MapCopy returns a copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) m.Set(2, 2) fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"1":1,"2":2} map[1:1 2:2]
func (*IntIntMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1001, 1) m.Set(1002, 2) n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"1001":1, "1002":2}
func (IntIntMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"1":1,"2":2,"3":3,"4":4}
func (*IntIntMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.Map m1.Set(1, "1") m2.Set(2, "2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:1 key2:2] }
Output:
func (*IntIntMap) Pop ¶
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Pop()) // May Output: // 1 1 }
Output:
func (*IntIntMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[1:1 2:2 3:3 4:4] // size: 0 // map[1:1 2:2] // size: 2 }
Output:
func (*IntIntMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) m.RLockFunc(func(m map[int]int) { totalValue := 0 for _, v := range m { totalValue += v } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*IntIntMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntIntMap m.Set(1, 1) fmt.Println(m.Remove(1)) fmt.Println(m.Remove(2)) fmt.Println(m.Size()) }
Output: 1 0 0
func (*IntIntMap) Removes ¶
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) removeList := make([]int, 2) removeList = append(removeList, 1) removeList = append(removeList, 2) m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[3:3 4:4]
func (*IntIntMap) Replace ¶
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, }) var n gmap.IntIntMap n.Sets(g.MapIntInt{ 2: 2, }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set(2, 1) fmt.Println(m.Map()) }
Output: map[1:1] map[2:2] map[2:1]
func (*IntIntMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) value, found := m.Search(1) if found { fmt.Println("find key1 value:", value) } value, found = m.Search(2) if !found { fmt.Println("key2 not find") } }
Output: find key1 value: 1 key2 not find
func (*IntIntMap) Set ¶
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() m.Set(1, 1) fmt.Println(m) }
Output: {"1":1}
func (*IntIntMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntIntMap fmt.Println(m.SetIfNotExist(1, 1)) fmt.Println(m.SetIfNotExist(1, 2)) fmt.Println(m.Map()) }
Output: true false map[1:1]
func (*IntIntMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntIntMap fmt.Println(m.SetIfNotExistFunc(1, func() int { return 1 })) fmt.Println(m.SetIfNotExistFunc(1, func() int { return 2 })) fmt.Println(m.Map()) }
Output: true false map[1:1]
func (*IntIntMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.IntIntMap fmt.Println(m.SetIfNotExistFuncLock(1, func() int { return 1 })) fmt.Println(m.SetIfNotExistFuncLock(1, func() int { return 2 })) fmt.Println(m.Map()) }
Output: true false map[1:1]
func (*IntIntMap) Sets ¶
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewIntIntMap() addMap := make(map[int]int) addMap[1] = 1 addMap[2] = 12 addMap[3] = 123 m.Sets(addMap) fmt.Println(m) }
Output: {"1":1,"2":12,"3":123}
func (*IntIntMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Size()) }
Output: 4
func (*IntIntMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, }) fmt.Println(m.String()) var m1 *gmap.IntIntMap = nil fmt.Println(len(m1.String())) }
Output: {"1":1} 0
func (*IntIntMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) var n gmap.Map err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[1:1 2:2 3:3 4:4]
func (*IntIntMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.IntIntMap n := map[int]int{ 1: 1001, 2: 1002, 3: 1003, } if err := gconv.Scan(n, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[int]int{1:1001, 2:1002, 3:1003}
func (*IntIntMap) Values ¶
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.IntIntMap m.Sets(g.MapIntInt{ 1: 1, 2: 2, 3: 3, 4: 4, }) fmt.Println(m.Values()) // May Output: // [1 v2 v3 4] }
Output:
type IntStrMap ¶
type IntStrMap struct {
// contains filtered or unexported fields
}
IntStrMap implements map[int]string with RWMutex that has switch.
func NewIntStrMap ¶
NewIntStrMap returns an empty IntStrMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
func NewIntStrMapFrom ¶
NewIntStrMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
func (*IntStrMap) Clear ¶
func (m *IntStrMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
func (*IntStrMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
func (*IntStrMap) DeepCopy ¶
func (m *IntStrMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*IntStrMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*IntStrMap) FilterEmpty ¶
func (m *IntStrMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
func (*IntStrMap) Flip ¶
func (m *IntStrMap) Flip()
Flip exchanges key-value of the map to value-key.
func (*IntStrMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
func (*IntStrMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
func (*IntStrMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
func (*IntStrMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
func (*IntStrMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
func (*IntStrMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
func (*IntStrMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
func (*IntStrMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
func (IntStrMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (*IntStrMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
func (*IntStrMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
func (*IntStrMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
func (*IntStrMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
func (*IntStrMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
func (*IntStrMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
func (*IntStrMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
func (*IntStrMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
func (*IntStrMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
func (*IntStrMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
type ListMap ¶
type ListMap struct {
// contains filtered or unexported fields
}
ListMap is a map that preserves insertion-order.
It is backed by a hash table to store values and doubly-linked list to store ordering.
Structure is not thread safe.
Reference: http://en.wikipedia.org/wiki/Associative_array
func NewListMap ¶
NewListMap returns an empty link map. ListMap is backed by a hash table to store values and doubly-linked list to store ordering. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "var1") m.Set("key2", "var2") fmt.Println(m) }
Output: {"key1":"var1","key2":"var2"}
func NewListMapFrom ¶
NewListMapFrom returns a link map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "var1") m.Set("key2", "var2") fmt.Println(m) n := gmap.NewListMapFrom(m.Map(), true) fmt.Println(n) // May Output: // {"key1":"var1","key2":"var2"} // {"key1":"var1","key2":"var2"} }
Output:
func (*ListMap) Clear ¶
func (m *ListMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*ListMap) Clone ¶
Clone returns a new link map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func (*ListMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Contains("k1")) fmt.Println(m.Contains("k5")) }
Output: true false
func (*ListMap) DeepCopy ¶
func (m *ListMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*ListMap) FilterEmpty ¶
func (m *ListMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewListMapFrom(g.MapAnyAny{ "k1": "", "k2": nil, "k3": 0, "k4": 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[k4:1]
func (*ListMap) Flip ¶
func (m *ListMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", }) m.Flip() fmt.Println(m.Map()) }
Output: map[v1:k1]
func (*ListMap) Get ¶
func (m *ListMap) Get(key interface{}) (value interface{})
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println("key1 value:", m.Get("key1")) fmt.Println("key2 value:", m.Get("key2")) }
Output: key1 value: val1 key2 value: <nil>
func (*ListMap) GetOrSet ¶
func (m *ListMap) GetOrSet(key interface{}, value interface{}) interface{}
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetOrSet("key1", "NotExistValue")) fmt.Println(m.GetOrSet("key2", "val2")) }
Output: val1 val2
func (*ListMap) GetOrSetFunc ¶
func (m *ListMap) GetOrSetFunc(key interface{}, f func() interface{}) interface{}
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*ListMap) GetOrSetFuncLock ¶
func (m *ListMap) GetOrSetFuncLock(key interface{}, f func() interface{}) interface{}
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*ListMap) GetVar ¶
GetVar returns a Var with the value by given `key`. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetVar("key1")) fmt.Println(m.GetVar("key2").IsNil()) }
Output: val1 true
func (*ListMap) GetVarOrSet ¶
GetVarOrSet returns a Var with result from GetVarOrSet. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSet("key1", "NotExistValue")) fmt.Println(m.GetVarOrSet("key2", "val2")) }
Output: val1 val2
func (*ListMap) GetVarOrSetFunc ¶
GetVarOrSetFunc returns a Var with result from GetOrSetFunc. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*ListMap) GetVarOrSetFuncLock ¶
GetVarOrSetFuncLock returns a Var with result from GetOrSetFuncLock. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*ListMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.ListMap fmt.Println(m.IsEmpty()) m.Set("k1", "v1") fmt.Println(m.IsEmpty()) }
Output: true false
func (*ListMap) Iterator ¶
Iterator is alias of IteratorAsc.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.Iterator(func(k interface{}, v interface{}) bool { totalKey += k.(int) totalValue += v.(int) return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) }
Output: totalKey: 10 totalValue: 20
func (*ListMap) IteratorAsc ¶
IteratorAsc iterates the map readonly in ascending order with given callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.IteratorAsc(func(k interface{}, v interface{}) bool { totalKey += k.(int) totalValue += v.(int) return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) }
Output: totalKey: 10 totalValue: 20
func (*ListMap) IteratorDesc ¶
IteratorDesc iterates the map readonly in descending order with given callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() for i := 0; i < 10; i++ { m.Set(i, i*2) } var totalKey, totalValue int m.IteratorDesc(func(k interface{}, v interface{}) bool { totalKey += k.(int) totalValue += v.(int) return totalKey < 10 }) fmt.Println("totalKey:", totalKey) fmt.Println("totalValue:", totalValue) }
Output: totalKey: 17 totalValue: 34
func (*ListMap) Keys ¶
func (m *ListMap) Keys() []interface{}
Keys returns all keys of the map as a slice in ascending order.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Keys()) // May Output: // [k1 k2 k3 k4] }
Output:
func (*ListMap) Map ¶
func (m *ListMap) Map() map[interface{}]interface{}
Map returns a copy of the underlying data of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m1 := gmap.NewListMap() m1.Set("key1", "val1") fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set("key1", "val2") fmt.Println("after n1:", n1) }
Output: m1: {"key1":"val1"} before n1: map[key1:val1] after n1: map[key1:val1]
func (*ListMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") m.Set("key2", "val2") n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"key1":"val1", "key2":"val2"}
func (ListMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.ListMap m.Set("k1", "v1") m.Set("k2", "v2") m.Set("k3", "v3") m.Set("k4", "v4") bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}
func (*ListMap) Merge ¶
Merge merges two link maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.ListMap m1.Set("key1", "val1") m2.Set("key2", "val2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:val1 key2:val2] }
Output:
func (*ListMap) Pop ¶
func (m *ListMap) Pop() (key, value interface{})
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pop()) // May Output: // k1 v1 }
Output:
func (*ListMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[k1:v1 k2:v2 k3:v3 k4:v4] // size: 0 // map[k1:v1 k2:v2] // size: 2 }
Output:
func (*ListMap) Remove ¶
func (m *ListMap) Remove(key interface{}) (value interface{})
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.ListMap m.Set("k1", "v1") fmt.Println(m.Remove("k1")) fmt.Println(m.Remove("k2")) fmt.Println(m.Size()) }
Output: v1 <nil> 0
func (*ListMap) Removes ¶
func (m *ListMap) Removes(keys []interface{})
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) removeList := make([]interface{}, 2) removeList = append(removeList, "k1") removeList = append(removeList, "k2") m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[k3:v3 k4:v4]
func (*ListMap) Replace ¶
func (m *ListMap) Replace(data map[interface{}]interface{})
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", }) var n gmap.ListMap n.Sets(g.MapAnyAny{ "k2": "v2", }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) }
Output: map[k1:v1] map[k2:v2]
func (*ListMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") value, found := m.Search("key1") if found { fmt.Println("find key1 value:", value) } value, found = m.Search("key2") if !found { fmt.Println("key2 not find") } }
Output: find key1 value: val1 key2 not find
func (*ListMap) Set ¶
func (m *ListMap) Set(key interface{}, value interface{})
Set sets key-value to the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func (*ListMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.ListMap fmt.Println(m.SetIfNotExist("k1", "v1")) fmt.Println(m.SetIfNotExist("k1", "v2")) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*ListMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.ListMap fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*ListMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.ListMap fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*ListMap) Sets ¶
func (m *ListMap) Sets(data map[interface{}]interface{})
Sets batch sets key-values to the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewListMap() addMap := make(map[interface{}]interface{}) addMap["key1"] = "val1" addMap["key2"] = "val2" addMap["key3"] = "val3" m.Sets(addMap) fmt.Println(m) // May Output: // {"key1":"val1","key2":"val2","key3":"val3"} }
Output:
func (*ListMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Size()) }
Output: 4
func (*ListMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", }) fmt.Println(m.String()) }
Output: {"k1":"v1"}
func (*ListMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) var n gmap.ListMap err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[k1:v1 k2:v2 k3:v3 k4:v4]
func (*ListMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { type User struct { Uid int Name string Pass1 string `gconv:"password1"` Pass2 string `gconv:"password2"` } var ( m gmap.AnyAnyMap user = User{ Uid: 1, Name: "john", Pass1: "123", Pass2: "456", } ) if err := gconv.Scan(user, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[interface {}]interface {}{"Name":"john", "Uid":1, "password1":"123", "password2":"456"}
func (*ListMap) Values ¶
func (m *ListMap) Values() []interface{}
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.ListMap m.Sets(g.MapAnyAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Values()) // May Output: // [v1 v2 v3 v4] }
Output:
type Map ¶
type Map = AnyAnyMap // Map is alias of AnyAnyMap.
func New ¶
New creates and returns an empty hash map. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() // Add data. m.Set("key1", "val1") // Print size. fmt.Println(m.Size()) addMap := make(map[interface{}]interface{}) addMap["key2"] = "val2" addMap["key3"] = "val3" addMap[1] = 1 fmt.Println(m.Values()) // Batch add data. m.Sets(addMap) // Gets the value of the corresponding key. fmt.Println(m.Get("key3")) // Get the value by key, or set it with given key-value if not exist. fmt.Println(m.GetOrSet("key4", "val4")) // Set key-value if the key does not exist, then return true; or else return false. fmt.Println(m.SetIfNotExist("key3", "val3")) // Remove key m.Remove("key2") fmt.Println(m.Keys()) // Batch remove keys. m.Removes([]interface{}{"key1", 1}) fmt.Println(m.Keys()) // Contains checks whether a key exists. fmt.Println(m.Contains("key3")) // Flip exchanges key-value of the map, it will change key-value to value-key. m.Flip() fmt.Println(m.Map()) // Clear deletes all data of the map. m.Clear() fmt.Println(m.Size()) // May Output: // 1 // [val1] // val3 // val4 // false // [key4 key1 key3 1] // [key4 key3] // true // map[val3:key3 val4:key4] // 0 }
Output:
func NewFrom ¶
NewFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside. The parameter `safe` is used to specify whether using tree in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m) n := gmap.NewFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func NewHashMap ¶
NewHashMap creates and returns an empty hash map. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewHashMap() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func NewHashMapFrom ¶
NewHashMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside. The parameter `safe` is used to specify whether using tree in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.New() m.Set("key1", "val1") fmt.Println(m) n := gmap.NewHashMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
type StrAnyMap ¶
type StrAnyMap struct {
// contains filtered or unexported fields
}
StrAnyMap implements map[string]interface{} with RWMutex that has switch.
func NewStrAnyMap ¶
NewStrAnyMap returns an empty StrAnyMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "var1") fmt.Println(m) }
Output: {"key1":"var1"}
func NewStrAnyMapFrom ¶
NewStrAnyMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "var1") fmt.Println(m) n := gmap.NewStrAnyMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":"var1"} {"key1":"var1"}
func (*StrAnyMap) Clear ¶
func (m *StrAnyMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*StrAnyMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func (*StrAnyMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Contains("k1")) fmt.Println(m.Contains("k5")) }
Output: true false
func (*StrAnyMap) DeepCopy ¶
func (m *StrAnyMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*StrAnyMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*StrAnyMap) FilterEmpty ¶
func (m *StrAnyMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewStrAnyMapFrom(g.MapStrAny{ "k1": "", "k2": nil, "k3": 0, "k4": 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[k4:1]
func (*StrAnyMap) FilterNil ¶
func (m *StrAnyMap) FilterNil()
FilterNil deletes all key-value pair of which the value is nil.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewStrAnyMapFrom(g.MapStrAny{ "k1": "", "k2": nil, "k3": 0, "k4": 1, }) m.FilterNil() fmt.Printf("%#v", m.Map()) }
Output: map[string]interface {}{"k1":"", "k3":0, "k4":1}
func (*StrAnyMap) Flip ¶
func (m *StrAnyMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", }) m.Flip() fmt.Println(m.Map()) }
Output: map[v1:k1]
func (*StrAnyMap) Get ¶
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println("key1 value:", m.Get("key1")) fmt.Println("key2 value:", m.Get("key2")) }
Output: key1 value: val1 key2 value: <nil>
func (*StrAnyMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetOrSet("key1", "NotExistValue")) fmt.Println(m.GetOrSet("key2", "val2")) }
Output: val1 val2
func (*StrAnyMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrAnyMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrAnyMap) GetVar ¶
GetVar returns a Var with the value by given `key`. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetVar("key1")) fmt.Println(m.GetVar("key2").IsNil()) }
Output: val1 true
func (*StrAnyMap) GetVarOrSet ¶
GetVarOrSet returns a Var with result from GetVarOrSet. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSet("key1", "NotExistValue")) fmt.Println(m.GetVarOrSet("key2", "val2")) }
Output: val1 val2
func (*StrAnyMap) GetVarOrSetFunc ¶
GetVarOrSetFunc returns a Var with result from GetOrSetFunc. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFunc("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFunc("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrAnyMap) GetVarOrSetFuncLock ¶
GetVarOrSetFuncLock returns a Var with result from GetOrSetFuncLock. The returned Var is un-concurrent safe.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m.GetVarOrSetFuncLock("key1", func() interface{} { return "NotExistValue" })) fmt.Println(m.GetVarOrSetFuncLock("key2", func() interface{} { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrAnyMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrAnyMap fmt.Println(m.IsEmpty()) m.Set("k1", "v1") fmt.Println(m.IsEmpty()) }
Output: true false
func (*StrAnyMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { m := gmap.NewStrAnyMap() for i := 1; i <= 10; i++ { m.Set(gconv.String(i), i*2) } var totalValue int m.Iterator(func(k string, v interface{}) bool { totalValue += v.(int) return totalValue < 50 }) fmt.Println("totalValue:", totalValue) // May Output: // totalValue: 52 }
Output:
func (*StrAnyMap) Keys ¶
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Keys()) // May Output: // [k1 k2 k3 k4] }
Output:
func (*StrAnyMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.LockFunc(func(m map[string]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*StrAnyMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.NewStrAnyMap() m1.Set("key1", "val1") fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set("key1", "val2") fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.NewStrAnyMap(true) m2.Set("key1", "val1") fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set("key1", "val2") fmt.Println("after n2:", n2) }
Output: m1: {"key1":"val1"} before n1: map[key1:val1] after n1: map[key1:val2] m2: {"key1":"val1"} before n2: map[key1:val1] after n2: map[key1:val1]
func (*StrAnyMap) MapCopy ¶
MapCopy returns a copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") m.Set("key2", "val2") fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"key1":"val1","key2":"val2"} map[key1:val1 key2:val2]
func (*StrAnyMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") m.Set("key2", "val2") n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"key1":"val1", "key2":"val2"}
func (StrAnyMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}
func (*StrAnyMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.StrAnyMap m1.Set("key1", "val1") m2.Set("key2", "val2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:val1 key2:val2] }
Output:
func (*StrAnyMap) Pop ¶
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pop()) // May Output: // k1 v1 }
Output:
func (*StrAnyMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[k1:v1 k2:v2 k3:v3 k4:v4] // size: 0 // map[k1:v1 k2:v2] // size: 2 }
Output:
func (*StrAnyMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.RLockFunc(func(m map[string]interface{}) { totalValue := 0 for _, v := range m { totalValue += v.(int) } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*StrAnyMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrAnyMap m.Set("k1", "v1") fmt.Println(m.Remove("k1")) fmt.Println(m.Remove("k2")) fmt.Println(m.Size()) }
Output: v1 <nil> 0
func (*StrAnyMap) Removes ¶
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) removeList := make([]string, 2) removeList = append(removeList, "k1") removeList = append(removeList, "k2") m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[k3:v3 k4:v4]
func (*StrAnyMap) Replace ¶
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", }) var n gmap.StrAnyMap n.Sets(g.MapStrAny{ "k2": "v2", }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set("k2", "v1") fmt.Println(m.Map()) }
Output: map[k1:v1] map[k2:v2] map[k2:v1]
func (*StrAnyMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") value, found := m.Search("key1") if found { fmt.Println("find key1 value:", value) } value, found = m.Search("key2") if !found { fmt.Println("key2 not find") } }
Output: find key1 value: val1 key2 not find
func (*StrAnyMap) Set ¶
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func (*StrAnyMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrAnyMap fmt.Println(m.SetIfNotExist("k1", "v1")) fmt.Println(m.SetIfNotExist("k1", "v2")) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrAnyMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrAnyMap fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFunc("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrAnyMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrAnyMap fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v1" })) fmt.Println(m.SetIfNotExistFuncLock("k1", func() interface{} { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrAnyMap) Sets ¶
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrAnyMap() addMap := make(map[string]interface{}) addMap["key1"] = "val1" addMap["key2"] = "val2" addMap["key3"] = "val3" m.Sets(addMap) fmt.Println(m) }
Output: {"key1":"val1","key2":"val2","key3":"val3"}
func (*StrAnyMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Size()) }
Output: 4
func (*StrAnyMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", }) fmt.Println(m.String()) var m1 *gmap.StrAnyMap = nil fmt.Println(len(m1.String())) }
Output: {"k1":"v1"} 0
func (*StrAnyMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) var n gmap.StrAnyMap err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[k1:v1 k2:v2 k3:v3 k4:v4]
func (*StrAnyMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrAnyMap goWeb := map[string]interface{}{ "goxrc": "https://goxrc.org", "gin": "https://gin-gonic.com/", "echo": "https://echo.labstack.com/", } if err := gconv.Scan(goWeb, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[string]interface {}{"echo":"https://echo.labstack.com/", "gin":"https://gin-gonic.com/", "goxrc":"https://goxrc.org"}
func (*StrAnyMap) Values ¶
func (m *StrAnyMap) Values() []interface{}
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrAnyMap m.Sets(g.MapStrAny{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Values()) // May Output: // [v1 v2 v3 v4] }
Output:
type StrIntMap ¶
type StrIntMap struct {
// contains filtered or unexported fields
}
StrIntMap implements map[string]int with RWMutex that has switch.
func NewStrIntMap ¶
NewStrIntMap returns an empty StrIntMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m) }
Output: {"key1":1}
func NewStrIntMapFrom ¶
NewStrIntMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m) n := gmap.NewStrIntMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":1} {"key1":1}
func (*StrIntMap) Clear ¶
func (m *StrIntMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*StrIntMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"key1":1} {"key1":1}
func (*StrIntMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Contains("k1")) fmt.Println(m.Contains("k5")) }
Output: true false
func (*StrIntMap) DeepCopy ¶
func (m *StrIntMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*StrIntMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*StrIntMap) FilterEmpty ¶
func (m *StrIntMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewStrIntMapFrom(g.MapStrInt{ "k1": 0, "k2": 1, }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[k2:1]
func (*StrIntMap) Flip ¶
func (m *StrIntMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, }) m.Flip() fmt.Println(m.Map()) var n gmap.StrIntMap n.Sets(g.MapStrInt{ "11": 1, }) n.Flip() fmt.Println(n.Map()) }
Output: map[1:0] map[1:11]
func (*StrIntMap) Get ¶
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println("key1 value:", m.Get("key1")) fmt.Println("key2 value:", m.Get("key2")) }
Output: key1 value: 1 key2 value: 0
func (*StrIntMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m.GetOrSet("key1", 0)) fmt.Println(m.GetOrSet("key2", 2)) }
Output: 1 2
func (*StrIntMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m.GetOrSetFunc("key1", func() int { return 0 })) fmt.Println(m.GetOrSetFunc("key2", func() int { return 0 })) }
Output: 1 0
func (*StrIntMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m.GetOrSetFuncLock("key1", func() int { return 0 })) fmt.Println(m.GetOrSetFuncLock("key2", func() int { return 0 })) }
Output: 1 0
func (*StrIntMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrIntMap fmt.Println(m.IsEmpty()) m.Set("k1", 1) fmt.Println(m.IsEmpty()) }
Output: true false
func (*StrIntMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { m := gmap.NewStrIntMap() for i := 0; i < 10; i++ { m.Set(gconv.String(i), i*2) } var totalValue int m.Iterator(func(k string, v int) bool { totalValue += v return totalValue < 50 }) fmt.Println("totalValue:", totalValue) // May Output: // totalValue: 52 }
Output:
func (*StrIntMap) Keys ¶
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Keys()) // May Output: // [k1 k2 k3 k4] }
Output:
func (*StrIntMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.LockFunc(func(m map[string]int) { totalValue := 0 for _, v := range m { totalValue += v } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*StrIntMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.NewStrIntMap() m1.Set("key1", 1) fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set("key1", 2) fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.NewStrIntMap(true) m2.Set("key1", 1) fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set("key1", 2) fmt.Println("after n2:", n2) }
Output: m1: {"key1":1} before n1: map[key1:1] after n1: map[key1:2] m2: {"key1":1} before n2: map[key1:1] after n2: map[key1:1]
func (*StrIntMap) MapCopy ¶
MapCopy returns a copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) m.Set("key2", 2) fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"key1":1,"key2":2} map[key1:1 key2:2]
func (*StrIntMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) m.Set("key2", 2) n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"key1":1, "key2":2}
func (StrIntMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"k1":1,"k2":2,"k3":3,"k4":4}
func (*StrIntMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.StrIntMap m1.Set("key1", 1) m2.Set("key2", 2) m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:1 key2:2] }
Output:
func (*StrIntMap) Pop ¶
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Pop()) // May Output: // k1 1 }
Output:
func (*StrIntMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[k1:1 k2:2 k3:3 k4:4] // size: 0 // map[k1:1 k2:2] // size: 2 }
Output:
func (*StrIntMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) m.RLockFunc(func(m map[string]int) { totalValue := 0 for _, v := range m { totalValue += v } fmt.Println("totalValue:", totalValue) }) }
Output: totalValue: 10
func (*StrIntMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrIntMap m.Set("k1", 1) fmt.Println(m.Remove("k1")) fmt.Println(m.Remove("k2")) fmt.Println(m.Size()) }
Output: 1 0 0
func (*StrIntMap) Removes ¶
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) removeList := make([]string, 2) removeList = append(removeList, "k1") removeList = append(removeList, "k2") m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[k3:3 k4:4]
func (*StrIntMap) Replace ¶
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, }) var n gmap.StrIntMap n.Sets(g.MapStrInt{ "k2": 2, }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set("k2", 1) fmt.Println(m.Map()) }
Output: map[k1:1] map[k2:2] map[k2:1]
func (*StrIntMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) value, found := m.Search("key1") if found { fmt.Println("find key1 value:", value) } value, found = m.Search("key2") if !found { fmt.Println("key2 not find") } }
Output: find key1 value: 1 key2 not find
func (*StrIntMap) Set ¶
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() m.Set("key1", 1) fmt.Println(m) }
Output: {"key1":1}
func (*StrIntMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrIntMap fmt.Println(m.SetIfNotExist("k1", 1)) fmt.Println(m.SetIfNotExist("k1", 2)) fmt.Println(m.Map()) }
Output: true false map[k1:1]
func (*StrIntMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrIntMap fmt.Println(m.SetIfNotExistFunc("k1", func() int { return 1 })) fmt.Println(m.SetIfNotExistFunc("k1", func() int { return 2 })) fmt.Println(m.Map()) }
Output: true false map[k1:1]
func (*StrIntMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrIntMap fmt.Println(m.SetIfNotExistFuncLock("k1", func() int { return 1 })) fmt.Println(m.SetIfNotExistFuncLock("k1", func() int { return 2 })) fmt.Println(m.Map()) }
Output: true false map[k1:1]
func (*StrIntMap) Sets ¶
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrIntMap() addMap := make(map[string]int) addMap["key1"] = 1 addMap["key2"] = 2 addMap["key3"] = 3 m.Sets(addMap) fmt.Println(m) }
Output: {"key1":1,"key2":2,"key3":3}
func (*StrIntMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Size()) }
Output: 4
func (*StrIntMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, }) fmt.Println(m.String()) var m1 *gmap.StrIntMap = nil fmt.Println(len(m1.String())) }
Output: {"k1":1} 0
func (*StrIntMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) var n gmap.StrIntMap err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[k1:1 k2:2 k3:3 k4:4]
func (*StrIntMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrIntMap goWeb := map[string]int{ "goxrc": 1, "gin": 2, "echo": 3, } if err := gconv.Scan(goWeb, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[string]int{"echo":3, "gin":2, "goxrc":1}
func (*StrIntMap) Values ¶
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrIntMap m.Sets(g.MapStrInt{ "k1": 1, "k2": 2, "k3": 3, "k4": 4, }) fmt.Println(m.Values()) // May Output: // [1 2 3 4] }
Output:
type StrStrMap ¶
type StrStrMap struct {
// contains filtered or unexported fields
}
StrStrMap implements map[string]string with RWMutex that has switch.
func NewStrStrMap ¶
NewStrStrMap returns an empty StrStrMap object. The parameter `safe` is used to specify whether using map in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "var1") fmt.Println(m) }
Output: {"key1":"var1"}
func NewStrStrMapFrom ¶
NewStrStrMapFrom creates and returns a hash map from given map `data`. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "var1") fmt.Println(m) n := gmap.NewStrStrMapFrom(m.MapCopy(), true) fmt.Println(n) }
Output: {"key1":"var1"} {"key1":"var1"}
func (*StrStrMap) Clear ¶
func (m *StrStrMap) Clear()
Clear deletes all data of the map, it will remake a new underlying data map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.Clear() fmt.Println(m.Map()) }
Output: map[]
func (*StrStrMap) Clone ¶
Clone returns a new hash map with copy of current map data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println(m) n := m.Clone() fmt.Println(n) }
Output: {"key1":"val1"} {"key1":"val1"}
func (*StrStrMap) Contains ¶
Contains checks whether a key exists. It returns true if the `key` exists, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Contains("k1")) fmt.Println(m.Contains("k5")) }
Output: true false
func (*StrStrMap) DeepCopy ¶
func (m *StrStrMap) DeepCopy() interface{}
DeepCopy implements interface for deep copy of current type.
func (*StrStrMap) Diff ¶
Diff compares current map `m` with map `other` and returns their different keys. The returned `addedKeys` are the keys that are in map `m` but not in map `other`. The returned `removedKeys` are the keys that are in map `other` but not in map `m`. The returned `updatedKeys` are the keys that are both in map `m` and `other` but their values and not equal (`!=`).
func (*StrStrMap) FilterEmpty ¶
func (m *StrStrMap) FilterEmpty()
FilterEmpty deletes all key-value pair of which the value is empty. Values like: 0, nil, false, "", len(slice/map/chan) == 0 are considered empty.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { m := gmap.NewStrStrMapFrom(g.MapStrStr{ "k1": "", "k2": "v2", }) m.FilterEmpty() fmt.Println(m.Map()) }
Output: map[k2:v2]
func (*StrStrMap) Flip ¶
func (m *StrStrMap) Flip()
Flip exchanges key-value of the map to value-key.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", }) m.Flip() fmt.Println(m.Map()) }
Output: map[v1:k1]
func (*StrStrMap) Get ¶
Get returns the value by given `key`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println("key1 value:", m.Get("key1")) fmt.Println("key2 value:", m.Get("key2")) }
Output: key1 value: val1 key2 value:
func (*StrStrMap) GetOrSet ¶
GetOrSet returns the value by key, or sets value with given `value` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println(m.GetOrSet("key1", "NotExistValue")) fmt.Println(m.GetOrSet("key2", "val2")) }
Output: val1 val2
func (*StrStrMap) GetOrSetFunc ¶
GetOrSetFunc returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFunc("key1", func() string { return "NotExistValue" })) fmt.Println(m.GetOrSetFunc("key2", func() string { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrStrMap) GetOrSetFuncLock ¶
GetOrSetFuncLock returns the value by key, or sets value with returned value of callback function `f` if it does not exist and then returns this value.
GetOrSetFuncLock differs with GetOrSetFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println(m.GetOrSetFuncLock("key1", func() string { return "NotExistValue" })) fmt.Println(m.GetOrSetFuncLock("key2", func() string { return "NotExistValue" })) }
Output: val1 NotExistValue
func (*StrStrMap) IsEmpty ¶
IsEmpty checks whether the map is empty. It returns true if map is empty, or else false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrStrMap fmt.Println(m.IsEmpty()) m.Set("k1", "v1") fmt.Println(m.IsEmpty()) }
Output: true false
func (*StrStrMap) Iterator ¶
Iterator iterates the hash map readonly with custom callback function `f`. If `f` returns true, then it continues iterating; or false to stop.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { m := gmap.NewStrStrMap() for i := 0; i < 10; i++ { m.Set("key"+gconv.String(i), "var"+gconv.String(i)) } var str string m.Iterator(func(k string, v string) bool { str += v + "|" return len(str) < 20 }) fmt.Println("str:", str) // May Output: // var0|var1|var2|var3| }
Output:
func (*StrStrMap) Keys ¶
Keys returns all keys of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Keys()) // May Output: // [k1 k2 k3 k4] }
Output:
func (*StrStrMap) LockFunc ¶
LockFunc locks writing with given callback function `f` within RWMutex.Lock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.LockFunc(func(m map[string]string) { for k, v := range m { fmt.Println("key:", k, " value:", v) } }) // May Output: // key: k1 value: v1 // key: k2 value: v2 // key: k3 value: v3 // key: k4 value: v4 }
Output:
func (*StrStrMap) Map ¶
Map returns the underlying data map. Note that, if it's in concurrent-safe usage, it returns a copy of underlying data, or else a pointer to the underlying data.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { // non concurrent-safety, a pointer to the underlying data m1 := gmap.NewStrStrMap() m1.Set("key1", "val1") fmt.Println("m1:", m1) n1 := m1.Map() fmt.Println("before n1:", n1) m1.Set("key1", "val2") fmt.Println("after n1:", n1) // concurrent-safety, copy of underlying data m2 := gmap.NewStrStrMap(true) m2.Set("key1", "val1") fmt.Println("m2:", m2) n2 := m2.Map() fmt.Println("before n2:", n2) m2.Set("key1", "val2") fmt.Println("after n2:", n2) }
Output: m1: {"key1":"val1"} before n1: map[key1:val1] after n1: map[key1:val2] m2: {"key1":"val1"} before n2: map[key1:val1] after n2: map[key1:val1]
func (*StrStrMap) MapCopy ¶
MapCopy returns a copy of the underlying data of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") m.Set("key2", "val2") fmt.Println(m) n := m.MapCopy() fmt.Println(n) }
Output: {"key1":"val1","key2":"val2"} map[key1:val1 key2:val2]
func (*StrStrMap) MapStrAny ¶
MapStrAny returns a copy of the underlying data of the map as map[string]interface{}.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") m.Set("key2", "val2") n := m.MapStrAny() fmt.Printf("%#v", n) }
Output: map[string]interface {}{"key1":"val1", "key2":"val2"}
func (StrStrMap) MarshalJSON ¶
MarshalJSON implements the interface MarshalJSON for json.Marshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) bytes, err := json.Marshal(&m) if err == nil { fmt.Println(gconv.String(bytes)) } }
Output: {"k1":"v1","k2":"v2","k3":"v3","k4":"v4"}
func (*StrStrMap) Merge ¶
Merge merges two hash maps. The `other` map will be merged into the map `m`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m1, m2 gmap.StrStrMap m1.Set("key1", "val1") m2.Set("key2", "val2") m1.Merge(&m2) fmt.Println(m1.Map()) // May Output: // map[key1:val1 key2:val2] }
Output:
func (*StrStrMap) Pop ¶
Pop retrieves and deletes an item from the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pop()) // May Output: // k1 v1 }
Output:
func (*StrStrMap) Pops ¶
Pops retrieves and deletes `size` items from the map. It returns all items if size == -1.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(-1)) fmt.Println("size:", m.Size()) m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Pops(2)) fmt.Println("size:", m.Size()) // May Output: // map[k1:v1 k2:v2 k3:v3 k4:v4] // size: 0 // map[k1:v1 k2:v2] // size: 2 }
Output:
func (*StrStrMap) RLockFunc ¶
RLockFunc locks reading with given callback function `f` within RWMutex.RLock.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) m.RLockFunc(func(m map[string]string) { for k, v := range m { fmt.Println("key:", k, " value:", v) } }) // May Output: // key: k1 value: v1 // key: k2 value: v2 // key: k3 value: v3 // key: k4 value: v4 }
Output:
func (*StrStrMap) Remove ¶
Remove deletes value from map by given `key`, and return this deleted value.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrStrMap m.Set("k1", "v1") fmt.Println(m.Remove("k1")) fmt.Println(len(m.Remove("k2"))) fmt.Println(m.Size()) }
Output: v1 0 0
func (*StrStrMap) Removes ¶
Removes batch deletes values of the map by keys.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) removeList := make([]string, 2) removeList = append(removeList, "k1") removeList = append(removeList, "k2") m.Removes(removeList) fmt.Println(m.Map()) }
Output: map[k3:v3 k4:v4]
func (*StrStrMap) Replace ¶
Replace the data of the map with given `data`.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", }) var n gmap.StrStrMap n.Sets(g.MapStrStr{ "k2": "v2", }) fmt.Println(m.Map()) m.Replace(n.Map()) fmt.Println(m.Map()) n.Set("k2", "v1") fmt.Println(m.Map()) }
Output: map[k1:v1] map[k2:v2] map[k2:v1]
func (*StrStrMap) Search ¶
Search searches the map with given `key`. Second return parameter `found` is true if key was found, otherwise false.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") value, found := m.Search("key1") if found { fmt.Println("find key1 value:", value) } value, found = m.Search("key2") if !found { fmt.Println("key2 not find") } }
Output: find key1 value: val1 key2 not find
func (*StrStrMap) Set ¶
Set sets key-value to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() m.Set("key1", "val1") fmt.Println(m) }
Output: {"key1":"val1"}
func (*StrStrMap) SetIfNotExist ¶
SetIfNotExist sets `value` to the map if the `key` does not exist, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrStrMap fmt.Println(m.SetIfNotExist("k1", "v1")) fmt.Println(m.SetIfNotExist("k1", "v2")) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrStrMap) SetIfNotExistFunc ¶
SetIfNotExistFunc sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrStrMap fmt.Println(m.SetIfNotExistFunc("k1", func() string { return "v1" })) fmt.Println(m.SetIfNotExistFunc("k1", func() string { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrStrMap) SetIfNotExistFuncLock ¶
SetIfNotExistFuncLock sets value with return value of callback function `f`, and then returns true. It returns false if `key` exists, and `value` would be ignored.
SetIfNotExistFuncLock differs with SetIfNotExistFunc function is that it executes function `f` with mutex.Lock of the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { var m gmap.StrStrMap fmt.Println(m.SetIfNotExistFuncLock("k1", func() string { return "v1" })) fmt.Println(m.SetIfNotExistFuncLock("k1", func() string { return "v2" })) fmt.Println(m.Map()) }
Output: true false map[k1:v1]
func (*StrStrMap) Sets ¶
Sets batch sets key-values to the hash map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" ) func main() { m := gmap.NewStrStrMap() addMap := make(map[string]string) addMap["key1"] = "val1" addMap["key2"] = "val2" addMap["key3"] = "val3" m.Sets(addMap) fmt.Println(m) }
Output: {"key1":"val1","key2":"val2","key3":"val3"}
func (*StrStrMap) Size ¶
Size returns the size of the map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Size()) }
Output: 4
func (*StrStrMap) String ¶
String returns the map as a string.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", }) fmt.Println(m.String()) var m1 *gmap.StrStrMap = nil fmt.Println(len(m1.String())) }
Output: {"k1":"v1"} 0
func (*StrStrMap) UnmarshalJSON ¶
UnmarshalJSON implements the interface UnmarshalJSON for json.Unmarshal.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" "github.com/xrcn/cg/internal/json" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) var n gmap.StrStrMap err := json.Unmarshal(gconv.Bytes(m.String()), &n) if err == nil { fmt.Println(n.Map()) } }
Output: map[k1:v1 k2:v2 k3:v3 k4:v4]
func (*StrStrMap) UnmarshalValue ¶
UnmarshalValue is an interface implement which sets any type of value for map.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gconv" ) func main() { var m gmap.StrStrMap goWeb := map[string]string{ "goxrc": "https://goxrc.org", "gin": "https://gin-gonic.com/", "echo": "https://echo.labstack.com/", } if err := gconv.Scan(goWeb, &m); err == nil { fmt.Printf("%#v", m.Map()) } }
Output: map[string]string{"echo":"https://echo.labstack.com/", "gin":"https://gin-gonic.com/", "goxrc":"https://goxrc.org"}
func (*StrStrMap) Values ¶
Values returns all values of the map as a slice.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/frame/g" ) func main() { var m gmap.StrStrMap m.Sets(g.MapStrStr{ "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4", }) fmt.Println(m.Values()) // May Output: // [v1 v2 v3 v4] }
Output:
type TreeMap ¶
type TreeMap = gtree.RedBlackTree
TreeMap based on red-black tree, alias of RedBlackTree.
func NewTreeMap ¶
NewTreeMap instantiates a tree map with the custom comparator. The parameter `safe` is used to specify whether using tree in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gutil" ) func main() { m := gmap.NewTreeMap(gutil.ComparatorString) m.Set("key2", "var2") m.Set("key1", "var1") fmt.Println(m.Map()) // May Output: // map[key1:var1 key2:var2] }
Output:
func NewTreeMapFrom ¶
func NewTreeMapFrom(comparator func(v1, v2 interface{}) int, data map[interface{}]interface{}, safe ...bool) *TreeMap
NewTreeMapFrom instantiates a tree map with the custom comparator and `data` map. Note that, the param `data` map will be set as the underlying data map(no deep copy), there might be some concurrent-safe issues when changing the map outside. The parameter `safe` is used to specify whether using tree in concurrent-safety, which is false in default.
Example ¶
package main import ( "fmt" "github.com/xrcn/cg/container/gmap" "github.com/xrcn/cg/util/gutil" ) func main() { m := gmap.NewTreeMap(gutil.ComparatorString) m.Set("key2", "var2") m.Set("key1", "var1") fmt.Println(m.Map()) n := gmap.NewListMapFrom(m.Map(), true) fmt.Println(n.Map()) // May Output: // map[key1:var1 key2:var2] // map[key1:var1 key2:var2] }
Output: