Golang Set

A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp.
Alternatives To Golang Set
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
21 hours ago2September 21, 2023892apache-2.0Rust
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.
Golang Set3,5925032,4968 days ago11November 29, 20235otherGo
A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp.
Manticore3,535113 months ago1,134December 05, 2023264agpl-3.0Python
Symbolic execution tool
3 days ago1September 07, 2022144agpl-3.0Solidity
Ethereum smart contract fuzzer
Remix Project2,133336 hours ago44December 01, 2023739mitTypeScript
Remix is a browser-based compiler and IDE that enables users to build Ethereum contracts with Solidity language and to debug transactions.
Swc Registry805
a month ago8mit
Smart Contract Weakness Classification and Test Cases
Blockchain Wallet V4 Frontend687
7 hours ago41agpl-3.0TypeScript
Blockchain.com's open source, non-custodial Wallet
Augur Core5611255 years ago51July 24, 20182gpl-3.0TypeScript
Augur back-end (Ethereum contracts)
Go Livepeer51437 hours ago69October 10, 2023240mitGo
Official Go implementation of the Livepeer protocol
Synpress48587 days ago180November 03, 202377mitJavaScript
Synpress is e2e testing framework based on Cypress.io and playwright with support for metamask.
Alternatives To Golang Set
Select To Compare

Alternative Project Comparisons

example workflow Go Report Card GoDoc


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

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.


Use go get to install this package.

go get github.com/deckarep/golang-set/v2


  • NEW Generics based implementation (requires Go 1.18 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.
  • 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


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 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 independently

Using this library is as simple as creating either a threadsafe or non-threadsafe set and providing a comparable type for instantiation of the collection.

// 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

package main

import (
  mapset "github.com/deckarep/golang-set/v2"

func main() {
  // Create a string-based set of required classes.
  required := mapset.NewSet[string]()

  // Create a string-based set of science classes.
  sciences := mapset.NewSet[string]()
  // Create a string-based set of electives.
  electives := mapset.NewSet[string]()

  // 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.

  all := required


Set{cooking, english, math, chemistry, welding, biology, music, automotive, beginner go, python for dummies}

Is cooking considered a science class?

result := sciences.Contains("cooking")



Show me all classes that are not science classes, since I don't enjoy science.

notScience := all.Difference(sciences)
Set{ music, automotive, beginner go, python for dummies, cooking, english, math, welding }

Which science classes are also required classes?

reqScience := sciences.Intersect(required)



How many bonus classes do you offer?




Thanks for visiting!


Popular Ethereum Projects
Popular Testing Projects
Popular Blockchain Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Data Structure