Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hello,
This PR adds a
ModifyOrSetFunc
method to the cache. The main motivation for this was to avoid allocations when using the cache to store slices as well as to have an atomic way of creating or updating these slices.ModifyOrSetFunc
takes two function arguments, one that is called if a key already exists, and it's return value is used to update the key's value.The second function is called if the key does not exist, with it's return value being used as the key's value. By using a function for the
Set
value, over simply passing the value in, such as inGetOrSet
, you avoid any allocations if the key is already present, which when being used with large values such asmake([]int, 0, 10000)
, provides a significant speedup as well as reduced GC load.I'm conscious I don't have a corresponding issue for this, so feel free to decline if this isn't something you think should be part of this library. I did see #72 which feels loosely related.