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 a heap-structured priority queue (package docs)
- mapset a basic map-based set implementation (package docs)
- mlink basic linked sequences (list, queue) (package docs)
- omap ordered key-value map (package docs)
- queue an array-based FIFO queue (package docs)
- ring a circular doubly-linked sequence (package docs)
- stack an array-based LIFO stack (package docs)
- stree self-balancing binary-search tree (package docs)
- cache an in-memory key/value cache (package docs)
- compare provides helpers for comparison of values (package docs)
- distinct a probabilistic distinct-elements counter (CVM) (package docs)
- mbits helpful functions for manipulating bits and bytes (package docs)
- mdiff supports creating textual diffs (package docs, example)
- mnet provides an in-memory network implementation compatible with the
netpackage (package docs) - mstr helpful functions for manipulating strings (package docs)
- mtest a support library for writing tests (package docs)
- shell POSIX shell quoting and splitting (package docs)
- slice helpful functions for manipulating slices (package docs)
- value helpful functions for basic values and pointers (package docs)