Support passing the result of one task into other tasks #1
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.
This PR changes the function signature of the task function to both return an empty interface and accept a new Results type. This type is a simple struct that holds a reference to a
sync.Map
, letting each task atomically and concurrently write their results and retrieve the results in later tasks.The idea is that, currently, users of this library have to declare variables global to a function to pass data around. While this has maximum type safety, it is also somewhat cumbersome, and introduces the possible error of forgetting to set a vale.
This PR makes a different trade-off. It argues that strict type safety is slightly overrated in the absence of polymorphic parametricity. Personally I'd rather be able to do
NewGraph<ResultTypeHere>(....)
a la Java but if Go is Java 1.4 might as well unleash the power of casting before contracts.