I'm not familiar with algebraic data types, what's missing from Go that makes that impossible? Sounds about like defining structs/other custom types before writing any method bodies, which is what I'd typically do in a Go project.
The language maintainers don't want to add it: https://github.com/golang/go/issues/19412