Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deckarep/golang-set
A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp.
https://github.com/deckarep/golang-set
concurrency datastructures generics go golang set threadsafe
Last synced: about 1 month ago
JSON representation
A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp.
- Host: GitHub
- URL: https://github.com/deckarep/golang-set
- Owner: deckarep
- License: other
- Created: 2013-07-03T21:52:01.000Z (almost 11 years ago)
- Default Branch: main
- Last Pushed: 2023-12-26T19:12:07.000Z (5 months ago)
- Last Synced: 2024-01-31T00:16:32.855Z (4 months ago)
- Topics: concurrency, datastructures, generics, go, golang, set, threadsafe
- Language: Go
- Homepage:
- Size: 391 KB
- Stars: 3,798
- Watchers: 50
- Forks: 303
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-stars - deckarep/golang-set - A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go-cn - golang-set
- awesome-go-extra - golang-set - 07-03T21:52:01Z|2022-07-28T04:33:06Z| (Generators / Sets)
- awesome-stars - deckarep/golang-set - tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-stars - deckarep/golang-set - A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. Stars:`3.9K`. (Data Structures and Algorithms / Sets)
- go-awesome - golang-set - The missing set collection (开源类库 / 数据结构)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome - deckarep/golang-set - A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-repositories - deckarep/golang-set - A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-toolbox - deckarep/golang-set
- awesome-golang-repositories - golang-set
- fucking-awesome-go - :octocat: golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. :star: 376 :fork_and_knife: 54 (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-projects - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Standard CLI)
- awesome-go - golang-set - Safe and Non-Thread-Safe high-performance sets for Go. | - | - | - | (Data Structures / Advanced Console UIs)
- awesome - golang-set - A simple generic set type for the Go language. (Go)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-with-framework - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-cn - golang-set - set) (数据结构与算法 / 集)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - 用于高性能设置Go的线程安全和非线程安全。 (<span id="数据结构-data-structures">数据结构 Data Structures</span> / <span id="高级控制台用户界面-advanced-console-uis">高级控制台用户界面 Advanced Console UIs</span>)
- awesome-go. - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-with-stars - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- repo-1316-awesome-go-cn - golang-set - set) (数据结构与算法 / 集)
- awesome-go-zh - golang-set - set) (数据结构与算法 / 集)
- repo-1211-awesome-go-cn - golang-set - set) (数据结构与算法 / 集)
- awesome-Char - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-reader - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-stars - golang-set(stars: 3900) - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- Go-awesome - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go-cn - golang-set - set) (数据结构与算法 / 集)
- awesome-starts - deckarep/golang-set - A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- my-awesome - deckarep/golang-set - 05 star:4.0k fork:0.3k A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. (Go)
- awesome-go-handwritten - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - A simple set type for the Go language. Also used in Docker, Kubernetes, Ethereum. - ★ 886 (Data Structures)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go2 - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. - :arrow_down:263 - :star:419 (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures / Advanced Console UIs)
- awesome-go-cn - golang-set
- go-awesome - golang-set - The missing set collection (开源类库 / 数据结构)
- awesome-go-cn - golang-set - Safe and Non-Thread-Safe high-performance sets for Go.) (数据结构 / Advanced Console UIs)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-go - golang-set - Thread-Safe and Non-Thread-Safe high-performance sets for Go. (Data Structures and Algorithms / Sets)
- awesome-stars - golang-set - tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. | deckarep | 3963 | (Go)
- go-awesome-cn-star - golang-set
README
![example workflow](https://github.com/deckarep/golang-set/actions/workflows/ci.yml/badge.svg)
[![Go Report Card](https://goreportcard.com/badge/github.com/deckarep/golang-set/v2)](https://goreportcard.com/report/github.com/deckarep/golang-set/v2)
[![GoDoc](https://godoc.org/github.com/deckarep/golang-set/v2?status.svg)](http://godoc.org/github.com/deckarep/golang-set/v2)# golang-set
The missing `generic` set collection for the Go language. Until Go has sets built-in...use this.
## Update 3/5/2023
* Packaged version: `2.2.0` release includes a refactor to minimize pointer indirection, better method documentation standards and a few constructor convenience methods to increase ergonomics when appending items `Append` or creating a new set from an exist `Map`.
* supports `new generic` syntax
* Go `1.18.0` or higher
* Workflow tested on Go `1.20`![With Generics](new_improved.jpeg)
Coming from Python one of the things I miss is the superbly wonderful set collection. This is my attempt to mimic the primary features of the set collection from Python.
You can of course argue that there is no need for a set in Go, otherwise the creators would have added one to the standard library. To those I say simply ignore this repository and carry-on and to the rest that find this useful please contribute in helping me make it better by contributing with suggestions or PRs.## Install
Use `go get` to install this package.
```shell
go get github.com/deckarep/golang-set/v2
```## Features
* *NEW* [Generics](https://go.dev/doc/tutorial/generics) based implementation (requires [Go 1.18](https://go.dev/blog/go1.18beta1) or higher)
* One common *interface* to both implementations
* a **non threadsafe** implementation favoring *performance*
* a **threadsafe** implementation favoring *concurrent* use
* Feature complete set implementation modeled after [Python's set implementation](https://docs.python.org/3/library/stdtypes.html#set).
* Exhaustive unit-test and benchmark suite## Trusted by
This package is trusted by many companies and thousands of open-source packages. Here are just a few sample users of this package.
* Notable projects/companies using this package
* Ethereum
* Docker
* 1Password
* Hashicorp## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=deckarep/golang-set&type=Date)](https://star-history.com/#deckarep/golang-set&Date)
## Usage
The code below demonstrates how a Set collection can better manage data and actually minimize boilerplate and needless loops in code. This package now fully supports *generic* syntax so you are now able to instantiate a collection for any [comparable](https://flaviocopes.com/golang-comparing-values/) type object.
What is considered comparable in Go?
* `Booleans`, `integers`, `strings`, `floats` or basically primitive types.
* `Pointers`
* `Arrays`
* `Structs` if *all of their fields* are also comparable independentlyUsing this library is as simple as creating either a threadsafe or non-threadsafe set and providing a `comparable` type for instantiation of the collection.
```go
// Syntax example, doesn't compile.
mySet := mapset.NewSet[T]() // where T is some concrete comparable type.// Therefore this code creates an int set
mySet := mapset.NewSet[int]()// Or perhaps you want a string set
mySet := mapset.NewSet[string]()type myStruct struct {
name string
age uint8
}// Alternatively a set of structs
mySet := mapset.NewSet[myStruct]()// Lastly a set that can hold anything using the any or empty interface keyword: interface{}. This is effectively removes type safety.
mySet := mapset.NewSet[any]()
```## Comprehensive Example
```go
package mainimport (
"fmt"
mapset "github.com/deckarep/golang-set/v2"
)func main() {
// Create a string-based set of required classes.
required := mapset.NewSet[string]()
required.Add("cooking")
required.Add("english")
required.Add("math")
required.Add("biology")// Create a string-based set of science classes.
sciences := mapset.NewSet[string]()
sciences.Add("biology")
sciences.Add("chemistry")
// Create a string-based set of electives.
electives := mapset.NewSet[string]()
electives.Add("welding")
electives.Add("music")
electives.Add("automotive")// Create a string-based set of bonus programming classes.
bonus := mapset.NewSet[string]()
bonus.Add("beginner go")
bonus.Add("python for dummies")
}
```Create a set of all unique classes.
Sets will *automatically* deduplicate the same data.```go
all := required
.Union(sciences)
.Union(electives)
.Union(bonus)
fmt.Println(all)
```Output:
```sh
Set{cooking, english, math, chemistry, welding, biology, music, automotive, beginner go, python for dummies}
```Is cooking considered a science class?
```go
result := sciences.Contains("cooking")
fmt.Println(result)
```Output:
```false
false
```Show me all classes that are not science classes, since I don't enjoy science.
```go
notScience := all.Difference(sciences)
fmt.Println(notScience)
``````sh
Set{ music, automotive, beginner go, python for dummies, cooking, english, math, welding }
```Which science classes are also required classes?
```go
reqScience := sciences.Intersect(required)
```Output:
```sh
Set{biology}
```How many bonus classes do you offer?
```go
fmt.Println(bonus.Cardinality())
```
Output:
```sh
2
```Thanks for visiting!
-deckarep