What happens
airflow.DagSpec and airflow.TaskSpec carry 9 pointer fields, so that a value an author
sets explicitly is distinguishable from one left unset — a bool whose default comes from
Airflow config, such as catchup, is the clearest case.
Go does not allow taking the address of a literal, so the obvious spelling does not compile:
dag := airflow.Dag("etl", airflow.DagSpec{Catchup: &false}) // invalid operand
An author has to name a variable for every such field:
catchup := false
dag := airflow.Dag("etl", airflow.DagSpec{Catchup: &catchup})
What would fix it
Go 1.26's new(expr):
dag := airflow.Dag("etl", airflow.DagSpec{Catchup: new(false)})
Why this is deferred rather than done
go-sdk/go.mod is on go 1.25.0. Go 1.26 was released in February 2026, which is too new
to require of everyone who builds a Go bundle, so the floor is not being raised for this.
Decided while reviewing #73936.
An airflow.Ptr[T] generic helper was considered and rejected there: the pointer
transformation is the language's job, not the SDK's.
Acceptance
Drafted-by: Claude Code (Opus 5) (no human review before posting)
What happens
airflow.DagSpecandairflow.TaskSpeccarry 9 pointer fields, so that a value an authorsets explicitly is distinguishable from one left unset — a
boolwhose default comes fromAirflow config, such as
catchup, is the clearest case.Go does not allow taking the address of a literal, so the obvious spelling does not compile:
An author has to name a variable for every such field:
What would fix it
Go 1.26's
new(expr):Why this is deferred rather than done
go-sdk/go.modis ongo 1.25.0. Go 1.26 was released in February 2026, which is too newto require of everyone who builds a Go bundle, so the floor is not being raised for this.
Decided while reviewing #73936.
An
airflow.Ptr[T]generic helper was considered and rejected there: the pointertransformation is the language's job, not the SDK's.
Acceptance
go-sdk/go.modraised to it.new(expr)used in the Dag authoring docs and examples, so the spelling an authorcopies is the short one.
Drafted-by: Claude Code (Opus 5) (no human review before posting)