just

package module
v0.32.0 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2022 License: MIT Imports: 4 Imported by: 6

README

just

Go Reference License Build Status Go Report Card CodeCov

This project is contains functions that help to do noizy things in every project.

  • Filter slices, maps.
  • Apply functions to collections.
  • Null[any] for optional fields in api an sql.DB requests.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Abs added in v0.15.0

func Abs[T number](v T) T

Abs returns abs value of v.

func Bool added in v0.4.0

func Bool[T builtin](v T) bool

Bool returns true if element not equal to default value for this type.

func MapContainsKey added in v0.27.0

func MapContainsKey[K comparable, V any](m map[K]V, key K) bool

MapContainsKey returns true if key is exists in the map.

func MapContainsKeysAll added in v0.27.0

func MapContainsKeysAll[K comparable, V any](m map[K]V, keys []K) bool

MapContainsKeysAll returns true when at all keys exists in the map.

func MapContainsKeysAny added in v0.27.0

func MapContainsKeysAny[K comparable, V any](m map[K]V, keys []K) bool

MapContainsKeysAny returns true when at least one key exists in the map.

func MapCopy added in v0.18.0

func MapCopy[K comparable, V any](m map[K]V) map[K]V

MapCopy returns a shallow copy of map.

func MapDefaults added in v0.18.0

func MapDefaults[K comparable, V any](m map[K]V, defaults map[K]V) map[K]V

MapDefaults returns the map `m` after filling in its non-exists keys by `defaults`. Example: {1:1}, {1:0, 2:2} => {1:1, 2:2}

func MapFilter added in v0.3.0

func MapFilter[K comparable, V any](in map[K]V, fn func(k K, v V) bool) map[K]V

MapFilter returns the map which contains elements that `fn(key, value) == true`.

func MapFilterKeys added in v0.3.0

func MapFilterKeys[K comparable, V any](in map[K]V, fn func(k K) bool) map[K]V

MapFilterKeys returns the map which contains elements that `fn(key) == true`. That is a simplified version of MapFilter.

func MapFilterValues added in v0.3.0

func MapFilterValues[K comparable, V any](in map[K]V, fn func(v V) bool) map[K]V

MapFilterValues returns the map which contains elements that `fn(value) == true`. That is a simplified version of MapFilter.

func MapGetKeys added in v0.17.0

func MapGetKeys[K comparable, V any](m map[K]V) []K

MapGetKeys returns all keys of map.

func MapGetValues added in v0.17.0

func MapGetValues[K comparable, V any](m map[K]V) []V

MapGetValues returns all values of map. Not Uniq, unordered.

func MapMap added in v0.26.0

func MapMap[K, K1 comparable, V, V1 any](in map[K]V, fn func(K, V) (K1, V1)) map[K1]V1

MapMap apply fn to all kv pairs from in.

func MapMerge added in v0.3.0

func MapMerge[K comparable, V any](m1, m2 map[K]V, fn func(k K, v1, v2 V) V) map[K]V

MapMerge returns the map which contains all keys from m1, m2 and values from `fn(key, m1Value, m2Value)`.

func Max

func Max[T number](in ...T) T

Max returns the max number from `in`.

func MaxDefault added in v0.25.0

func MaxDefault[T number](in ...T) T

MaxDefault returns max element from `in` or default value for specified type when `in` is empty.

func MaxOr added in v0.25.0

func MaxOr[T number](defaultVal T, in ...T) T

MaxOr returns max element from `in` or defaultVal when `in` is empty

func Min

func Min[T number](in ...T) T

Min returns the min number from `in`.

func MinDefault added in v0.25.0

func MinDefault[T number](in ...T) T

MinDefault returns min element from `in` or default value for specified type when `in` is empty.

func MinOr added in v0.25.0

func MinOr[T number](defaultVal T, in ...T) T

MinOr returns min element from `in` or defaultVal when `in` is empty

func Pointer added in v0.2.0

func Pointer[T any](v T) *T

func Slice2Map added in v0.9.0

func Slice2Map[T comparable](in []T) map[T]struct{}

Slice2Map make map from slice, which contains all values from `in` as map keys.

func SliceAddNotExists added in v0.7.0

func SliceAddNotExists[T comparable](in []T, elem T) []T

SliceAddNotExists return `in` with `elem` inside when `elem` not exists in `in`.

func SliceAll added in v0.4.0

func SliceAll[T any](in []T, fn func(T) bool) bool

SliceAll returns true when `fn` returns true for all elements from `in`. Returns true when in is empty.

func SliceAny added in v0.4.0

func SliceAny[T any](in []T, fn func(T) bool) bool

SliceAny returns true when `fn` returns true for at least one element from `in`.

func SliceApply added in v0.31.0

func SliceApply[T any](in []T, fn func(int, T))

SliceApply handle all elements from `in` by function `fn`. Function apply sequentially.

func SliceChain added in v0.19.0

func SliceChain[T any](in ...[]T) []T

SliceChain returns a slice where all `in` slices id appended to the end. Like append(append(in[0], in[1]...), in[2]...).

func SliceChunk added in v0.11.0

func SliceChunk[T any](in []T, fn func(i int, elem T) bool) [][]T

SliceChunk split `in` into chunks by fn(index, elem) == true.

func SliceChunkEvery added in v0.12.0

func SliceChunkEvery[T any](in []T, every int) [][]T

SliceChunkEvery split `in` into chunks by size `every`

func SliceContainsElem added in v0.10.0

func SliceContainsElem[T comparable](in []T, elem T) bool

SliceContainsElem returns true when `in` contains elem.

func SliceDifference added in v0.9.0

func SliceDifference[T comparable](oldSlice, newSlice []T) []T

SliceDifference return the difference between `oldSlice` and `newSlice`. Returns only elements which presented in `newSlice` but not presented in `oldSlice`. Example: [1,2,3], [3,4,5,5,5] => [4,5,5,5]

func SliceEqualUnordered added in v0.17.0

func SliceEqualUnordered[T comparable](in1, in2 []T) bool

SliceEqualUnordered returns true when all uniq values from `in1` contains in `in2`. Useful in tests for comparing expected and actual slices. Examples:

  • [1,2,3], [2,3,3,3,1,1] => true
  • [1], [1,1,1] => true
  • [1], [1] => true
  • [1], [2] => false

func SliceFillElem added in v0.11.0

func SliceFillElem[T any](l int, elem T) []T

SliceFillElem returns the slice with len `l` where all elements are equal to `elem`.

func SliceFilter added in v0.3.0

func SliceFilter[T any](in []T, fn func(T) bool) []T

SliceFilter returns slice of values from `in` where `fn(elem) == true`.

func SliceFindAllElements added in v0.13.0

func SliceFindAllElements[T any](in []T, fn func(i int, elem T) bool) []T

SliceFindAllElements return all elem from `in` that fn(index, elem) == true.

func SliceFindAllIndexes added in v0.13.0

func SliceFindAllIndexes[T any](in []T, fn func(i int, elem T) bool) []int

SliceFindAllIndexes return all indexes from `in` that fn(index, elem) == true.

func SliceGroupBy added in v0.28.0

func SliceGroupBy[K comparable, V any](in []V, fn func(V) K) map[K][]V

SliceGroupBy will group all

func SliceIntersection added in v0.17.0

func SliceIntersection[T comparable](oldSlice, newSlice []T) []T

SliceIntersection returns elements that are presented in both slices. Example: [1,2,3], [2,4,3,3,3] => [2, 3]

func SliceMap added in v0.3.0

func SliceMap[T any, V any](in []T, fn func(T) V) []V

SliceMap returns the slice where each element of `in` was handled by `fn`.

func SliceMapErr added in v0.29.0

func SliceMapErr[T any, V any](in []T, fn func(T) (V, error)) ([]V, error)

SliceMapErr do the same thing as SliceMap, but return error when error occurs in fn.

func SliceRange added in v0.15.0

func SliceRange[T number](start, stop, step T) []T

SliceRange produces a sequence of integers from start (inclusive) to stop (exclusive) by step.

func SliceReverse added in v0.4.0

func SliceReverse[T any](in []T) []T

SliceReverse reverse the slice.

func SliceSort added in v0.20.0

func SliceSort[T any](in []T, less func(a, b T) bool)

SliceSort sort slice inplace.

func SliceSortCopy added in v0.20.0

func SliceSortCopy[T any](in []T, less func(a, b T) bool) []T

SliceSortCopy copy and sort slice.

func SliceUnion added in v0.8.0

func SliceUnion[T comparable](in ...[]T) []T

SliceUnion returns only uniq items from all slices.

func SliceUniq added in v0.3.0

func SliceUniq[T comparable](in []T) []T

SliceUniq returns only unique values from `in`.

func SliceWithout added in v0.10.0

func SliceWithout[T any](in []T, fn func(T) bool) []T

SliceWithout returns the slice `in` where fn(elem) == true.

func SliceWithoutElem added in v0.10.0

func SliceWithoutElem[T comparable](in []T, elem T) []T

SliceWithoutElem returns the slice `in` that not contains `elem`.

func SliceZip added in v0.10.0

func SliceZip[T any](in ...[]T) [][]T

SliceZip returns merged together the values of each of the arrays with the values at the corresponding position. If the len of `in` is different - will use smaller one.

func Sum

func Sum[T number](in ...T) T

Sum returns the sum of numbers from `in`.

Types

type KV added in v0.18.0

type KV[K comparable, V any] struct {
	Key K
	Val V
}

KV represents the key-value of map.

func MapPairs added in v0.18.0

func MapPairs[K comparable, V any](m map[K]V) []KV[K, V]

MapPairs returns slice of KV structs that contains ket-value pairs.

type NullVal added in v0.5.0

type NullVal[T any] struct {
	Val   T    `json:"v"`
	Valid bool `json:"ok"`
}

NullVal represent the nullable value for this type.

func Null added in v0.5.0

func Null[T any](val T) NullVal[T]

Null returns NullVal for `val` type, which are `NullVal.Valid == true`.

func NullNull added in v0.5.0

func NullNull[T any]() NullVal[T]

NullNull returns NullVal, which are `NullVal.Valid == false`.

func (*NullVal[T]) Scan added in v0.5.0

func (nv *NullVal[T]) Scan(value any) error

Scan implements the Scanner interface.

func (*NullVal[T]) SetDefault added in v0.5.0

func (nv *NullVal[T]) SetDefault(val T) bool

SetDefault set value `val` if NullVal.Valid == false.

func (NullVal[T]) Value added in v0.5.0

func (nv NullVal[T]) Value() (driver.Value, error)

Value implements the driver Valuer interface.

func (NullVal[T]) ValueOk added in v0.5.0

func (nv NullVal[T]) ValueOk() (T, bool)

ValueOk returns the NullVal.Val and NullVal.Valid.

type SliceElem added in v0.13.0

type SliceElem[T any] struct {
	// Idx is index of element in slice.
	Idx int
	// Val is value on slice by Idx index.
	Val T
}

SliceElem represent element of slice.

func SliceFindAll added in v0.13.0

func SliceFindAll[T any](in []T, fn func(i int, elem T) bool) []SliceElem[T]

SliceFindAll return all elem and index from `in` that fn(index, elem) == true.

func SliceFindFirst added in v0.13.0

func SliceFindFirst[T any](in []T, fn func(i int, elem T) bool) SliceElem[T]

SliceFindFirst return first elem from `in` that fn(index, elem) == true. returns index of found elem or -1 if elem not found.

func SliceFindFirstElem added in v0.14.0

func SliceFindFirstElem[T comparable](in []T, elem T) SliceElem[T]

SliceFindFirstElem return first elem from `in` that equals to `elem`.

func SliceFindLast added in v0.13.0

func SliceFindLast[T any](in []T, fn func(i int, elem T) bool) SliceElem[T]

SliceFindLast return last elem from `in` that fn(index, elem) == true. returns index of found elem or -1 if elem not found.

func SliceFindLastElem added in v0.14.0

func SliceFindLastElem[T comparable](in []T, elem T) SliceElem[T]

SliceFindLastElem return last elem from `in` that equals to `elem`.

func (SliceElem[T]) Ok added in v0.14.0

func (e SliceElem[T]) Ok() bool

Ok returns true if Idx is valid.

func (SliceElem[T]) ValueIdx added in v0.14.0

func (e SliceElem[T]) ValueIdx() (T, int)

ValueIdx returns value and index as is. Useful for this:

elem, idx := SliceFindFirstElem([]int{1,2,3}, 2).ValueIdx()

func (SliceElem[T]) ValueOk added in v0.14.0

func (e SliceElem[T]) ValueOk() (T, bool)

ValueOk returns the value and true (when element is exists in slice) or false in other case. Useful for cases like:

if elem, ok := SliceFindFirstElem([]int{1,2,3}, 2); ok{
	fmt.Println(elem)
}

Jump to

Keyboard shortcuts

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