Comments (4)
Hello,
I think you’re right we could use some clarity around how iterators work and any potential pitfalls.
So in an effort to preserve long-standing backwards compatibility there are actually three ways of doing iteration.
- Iter - original method but can leak if the contents of the channel are not fully consumed. ie, an early break or return - at one point this was marked as deprecated and somewhere along the lines it’s been no longer marked that way.
- Each - this is just a callback executed per each element to use. You can safely early return, no leaks and no need to close/stop anything.
- Iterator - the most recent way - this is an implementation that is more similar to Iterators in the stdlib but does require to call Stop.
I personally recommend Each as I’ve always thought it solves all problems of iterations and doesn’t require messy cleanup at all.
To answer your questions:
- When using Iterator you should always call Stop to avoid leaking resources and also provide deterministic cleanup.
- Stop should generally be called out of your loop and deferring the call is fine. Remember that defer has function scope, not block scope.
from golang-set.
Cool, thanks for the speedy response. I'd be happy to submit a PR with these recommendations if you'd like (assuming my company is MIT-friendly, pretty sure but gotta double check)
One last question: if you've fully exhausted an Iterator(), do you still need to .Stop()
it? If so that's not shown in the iterator example test.
from golang-set.
Calling Stop closes the channel. It’s best practice to do a proper shutdown with things. In the event that the channel is not fully drained Stop will ensure the remaining items are drained.
So at an absolute minimum it closes the channel. It’s not the end of the world as the channel would be garbage collected but you would be future proofing the code if for example someone came back in 3 months and changed the code to early return (or break).
from golang-set.
Also, I’d love a PR that clears up docs. =)
from golang-set.
Related Issues (20)
- Missing support Len()/Count()/Size() method? HOT 2
- iterate with random sequence? HOT 1
- 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 4
- 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
- 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
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.