This repository defines generic data structures and utility types in Go.
The packages in this module are intended to be leaf libraries, and MUST NOT depend on packages outside this module, excepting only packages from the Go standard library, as well as selected golang.org/x/* packages on a case-by-case basis. Separate-package tests in this repository may depend on other packages, but such dependencies must be minimized.
Packages within the module may depend on each other, where appropriate.
This module is currently versioned v0, and thus packages here are subject to breaking changes. I will attempt to minimize such changes where practical, but I may revise package APIs from time to time. When making such changes, I will increment the minor version number as a signal that more substantial changes are included.
Although I wrote these packages mainly for my own use, they are intended to be general-purpose, and you are welcome to use and depend on them. If you do so, I would be grateful for you to file issues for any problems you may encounter. While I cannot promise extensive support, I will do my best to accommodate reasonable requests.
Several of the data-types in this module share common behaviors:
- An
Addmethod to add or update one or more elements in the container. - A
Removemethod to remove one or more elements from the container. - A
Clearmethod that discards all the contents of the container. - A
Peekmethod that returns an order statistic of the container. - An
Eachmethod that iterates the container in its natural order (usable as a range function). - An
IsEmptymethod that reports whether the container is empty. - A
Lenmethod that reports the number of elements in the container.
- heapq [code] a heap-structured priority queue
- mapset [code] a basic map-based set implementation
- mlink [code] basic linked sequences (list, queue)
- omap [code] ordered key-value map
- queue [code] an array-based FIFO queue
- ring [code] a circular doubly-linked sequence
- stack [code] an array-based LIFO stack
- stree [code] self-balancing binary-search tree
- cache [code] an in-memory key/value cache
- compare [code] provides helpers for comparison of values
- distinct [code] a probabilistic distinct-elements counter (CVM)
- mbits [code] helpful functions for manipulating bits and bytes
- mdiff [code], supports creating textual diff (example)
- mnet [code] provides an in-memory network implementation compatible with the
netpackage - mstr [code] helpful functions for manipulating strings
- mtest [code] a support library for writing tests
- shell [code] POSIX shell quoting and splitting
- slice [code] helpful functions for manipulating slices
- value [code] helpful functions for basic values and pointers