Skip to main content

How to execute a Side Effect in Go

Use the SideEffect API from the go.temporal.io/sdk/workflow package to execute a Side Effect directly in your Workflow.

Pass it an instance of context.Context and the function to execute.

The SideEffect API returns a Future, an instance of converter.EncodedValue.

Use the Get method on the Future to retrieve the result of the Side Effect.

Correct implementation#

The following example demonstrates the correct way to use SideEffect:

encodedRandom := workflow.SideEffect(ctx, func(ctx workflow.Context) interface{} {  return rand.Intn(100)})
var random intencodedRandom.Get(&random)// ...}

Incorrect implementation#

The following example demonstrates how NOT to use SideEffect:

// Warning: This is an incorrect example.// This code is nondeterministic.var random intworkflow.SideEffect(func(ctx workflow.Context) interface{} {       random = rand.Intn(100)       return nil})// random will always be 0 in replay, so this code is nondeterministic.

On replay the provided function is not executed, the random number will always be 0, and the Workflow Execution could take a different path, breaking determinism.

Get notified of updates