What about wrapping nil in a Maybe or Option type?
aarjaneiro•59m ago
This is more about a hard dependency which causes a function to early exit
flowerthoughts•54m ago
In this case, the missing piece in Go is the NonNullable hint. That would make it clear that null checks aren't needed, enforceable by the type system, and lintable.
Option types just forces you to do the check, but doesn't remove the need for it.
Now that we have generic types, a NonNullable intrinsic type seems doable...
sail0rm00n•52m ago
References like C++, maybe?
cubefox•36m ago
Or a set theoretic type system with union type declarations (foo|null), like in TypeScript.
bediger4000•2d ago
This is good advice for humans: they can quantify to decide "too many nil checks" or not. But it's not good for agentic coding, which we're entering the age of. Although agents are the worst they'll ever be right now, they're never going to be great at quantifying too many nil checks. I think we'll have to get used to far more nil checks than even bad programmers put in. But that doesn't matter to agents, they've got infinite attention spans, no cognitive bias and large working memories. Sonn we'll see no nil checks.
lenkite•23h ago
Delegate all `nil` and bad input checks to a validation framework and use it in all your constructor functions.
FridgeSeal•11m ago
I’ll go you one better: integrate it into your language and have the compiler enforce it for you!
usrnm•48m ago
Also known as contract programming vs. defensive programming. This argument is very old, is not specific to golang, and I have found myself on both sides at different points in my carreer.
diarrhea•39m ago
This is the mess a language lands on when it conflates optionality (a semantic concept) with references/pointers (purely a machine concept). In Go, the requirement "need (non-optional) a reference to an object" is simply not expressible. This is a solved problem in other languages, for example `&T` vs. `Option<&T>` in Rust.
throwa356262•24m ago
What the article said applies to Rust ref vs ref-option too.
Groxx•15m ago
Don't forget mutability! Go throws that on top too.
Animats•9m ago
In C++, that distinction supposedly exists. References should never be null, while pointers can be. But there's no enforcement.
int& ref = *ptr;
ought to generate a panic for a null pointer. But it doesn't. They were so close to getting it right.
turtleyacht•2d ago
aarjaneiro•59m ago
flowerthoughts•54m ago
Option types just forces you to do the check, but doesn't remove the need for it.
Now that we have generic types, a NonNullable intrinsic type seems doable...
sail0rm00n•52m ago
cubefox•36m ago