Comments (8)
I found this while trying to make project calico's Set
generic (PR) looking for a workaround for the "any not comparable" problem. The solution I happened on was to make an interface type Set[T any]
and then two concrete implementations: type mapSet[T comparable] map[T]struct{}
and type boxedSet[T any] map[any]struct{}
. Then you can use mapSet
if possible and boxedSet
for interface types.
They both give type-safe methods π but boxedSet
has the overhead of boxing/unboxing into an any
. They both implement Set[T]
once T is specified so apart from picking the right constructor they're interchangable after that.
from golang-set.
Hey thanks for the vote of confidence on the new changes as well as the bug report.
PowerSet was added sometime back for completion sake but I will admit that I donβt think itβs used all that much. I have recently considered removing it because I couldnβt find a great solution that was generics compatible.
Your investigation is appreciated and Iβll see what I can do in the coming days.
from golang-set.
@deckarep Now that 1.18 is out, do you think you'd be interested in releasing the generics branch, perhaps with the 2 problematic methods removed?
from golang-set.
@billinghamj - sorry for the delay on this. I have finally got around to release a 2.0.0 tag using your changes to support the final release of Go 1.18.
Big thanks for sorting out the bug around any
type not being comparable
.
from golang-set.
Going through playing with some changes, for some of the tests, it seems there is no workaround to enable what they're trying to do
I've commented on the PR to flag that, as it seems odd to make this kind of code impossible to write
Edit: opened it as a new issue on the go repo - golang/go#51257
from golang-set.
For now, I've released here without the problematic methods, as a workaround: https://github.com/billinghamj/golang-set
from golang-set.
No problem π I'm very happy to pitch in with anything if that'd be helpful too π
from golang-set.
@deckarep btw, now that Go 1.20 is out, I think those methods could be added back :)
I believe the issue was finally resolved by golang/go#56548, and that change went out in 1.20
from golang-set.
Related Issues (20)
- Feature request: Support for immutable sets HOT 1
- [Q] How to print the contents of a Set? HOT 1
- Getting error when instantiating a set: "invalid operation: cannot index mapset.NewSet (value of type func(s ...interface{}) mapset.Set)" HOT 6
- No installation guide
- [Question] Contains() parameters escape to heap HOT 4
- How I can get every elements in my set? HOT 2
- Unmarshalling threadUnsafeSet with json.Unmarshal panics HOT 7
- Document thread-safe set usage HOT 1
- Issue: Contains HOT 2
- [Question] Why isn't `defer` used? HOT 6
- Non-mutating helpers to add/remove HOT 2
- Guidance/suggestions on Iterators and Stop() HOT 5
- Add a way to distinguish thread safe and unsafe sets HOT 3
- Is there any method to know whether a set is empty? HOT 2
- unmarshal json fails when set is part of struct HOT 2
- Suggestion: option to restrict comparable to only exported values. HOT 1
- why isn't there a `mapset.NewSetFromSlice` method? HOT 1
- Allow capacity to be specified when initializing a Set HOT 2
- Suggestion: Add comparator for structs HOT 4
- Support 1.23 iterator for set HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from golang-set.