3 ms·
Go doesn't have assertions. Of course it is not hard to mimic them, but it's an intentional choice to increase the friction of doing that and make it feel unidi
by dmurray 6y ago
Go doesn't have assertions. Of course it is not hard to mimic them, but it's an intentional choice to increase the friction of doing that and make it feel unidiomatic.
- MaxBarraclough 6y agoDoes Go really aim to discourage the programmer from adding runtime checks? What's the reasoning there?
- orisho 6y agoAn assertion, I think, would crash the program. In that sense implementing them is simple - just panic when the condition is violated. Go prefers plain checks that return errors, though. Panics should be used for truly unexpected conditions, such as a nil pointer. Invalid input, as in this case, would be better served as an error.
- randomdata 6y ago> Panics should be used for truly unexpected conditions, such as a nil pointer. Exceptional cases, if you will. I find it funny when people say Go doesn't have exceptions when Go is the only mainstream language that advocates for and prefers the use of exceptions.
- dmurray 6y agoTo encourage "proper error handling and reporting" according to the FAQ. https://golang.org/doc/faq#assertions https://golang.org/doc/faq#assertions
- sanxiyn 6y agoYes, Go really does discourage assertions.
- zeeboo 6y agoI should not have used the word "assertion". I meant it in the more general way of "code that checks some property", not a literal "assert" feature as built in to the language. I was just pointing out that this bug basically requires an explicit test checking for exactly the bug. Fuzzing would not have found the check for you.