Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Foundry | 6,943 | 21 hours ago | 2 | September 21, 2023 | 892 | apache-2.0 | Rust | |||
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. | ||||||||||
Golang Set | 3,592 | 503 | 2,496 | 8 days ago | 11 | November 29, 2023 | 5 | other | Go | |
A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp. | ||||||||||
Manticore | 3,535 | 1 | 1 | 3 months ago | 1,134 | December 05, 2023 | 264 | agpl-3.0 | Python | |
Symbolic execution tool | ||||||||||
Echidna | 2,401 | 3 days ago | 1 | September 07, 2022 | 144 | agpl-3.0 | Solidity | |||
Ethereum smart contract fuzzer | ||||||||||
Remix Project | 2,133 | 33 | 6 hours ago | 44 | December 01, 2023 | 739 | mit | TypeScript | ||
Remix is a browser-based compiler and IDE that enables users to build Ethereum contracts with Solidity language and to debug transactions. | ||||||||||
Swc Registry | 805 | a month ago | 8 | mit | ||||||
Smart Contract Weakness Classification and Test Cases | ||||||||||
Blockchain Wallet V4 Frontend | 687 | 7 hours ago | 41 | agpl-3.0 | TypeScript | |||||
Blockchain.com's open source, non-custodial Wallet | ||||||||||
Augur Core | 561 | 12 | 5 | 5 years ago | 51 | July 24, 2018 | 2 | gpl-3.0 | TypeScript | |
Augur back-end (Ethereum contracts) | ||||||||||
Go Livepeer | 514 | 3 | 7 hours ago | 69 | October 10, 2023 | 240 | mit | Go | ||
Official Go implementation of the Livepeer protocol | ||||||||||
Synpress | 485 | 8 | 7 days ago | 180 | November 03, 2023 | 77 | mit | JavaScript | ||
Synpress is e2e testing framework based on Cypress.io and playwright with support for metamask. |
The missing generic
set collection for the Go language. Until Go has sets built-in...use this.
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
.new generic
syntax1.18.0
or higher1.20
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
This package is trusted by many companies and thousands of open-source packages. Here are just a few sample users of this package.
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 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.
// 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]()
package main
import (
"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.
all := required
.Union(sciences)
.Union(electives)
.Union(bonus)
fmt.Println(all)
Output:
Set{cooking, english, math, chemistry, welding, biology, music, automotive, beginner go, python for dummies}
Is cooking considered a science class?
result := sciences.Contains("cooking")
fmt.Println(result)
Output:
false
Show me all classes that are not science classes, since I don't enjoy science.
notScience := all.Difference(sciences)
fmt.Println(notScience)
Set{ music, automotive, beginner go, python for dummies, cooking, english, math, welding }
Which science classes are also required classes?
reqScience := sciences.Intersect(required)
Output:
Set{biology}
How many bonus classes do you offer?
fmt.Println(bonus.Cardinality())
Output:
2
Thanks for visiting!
-deckarep