Go Koans
github.com
github.com
Edit: to be a little more constructive, do the Go tour instead.
> Why does Go not have assertions?
> Go doesn't provide assertions. They are undeniably convenient, but our experience has been that programmers use them as a crutch to avoid thinking about proper error handling and reporting. Proper error handling means that servers continue operation after non-fatal errors instead of crashing. Proper error reporting means that errors are direct and to the point, saving the programmer from interpreting a large crash trace. Precise errors are particularly important when the programmer seeing the errors is not familiar with the code.
> We understand that this is a point of contention. There are many things in the Go language and libraries that differ from modern practices, simply because we feel it's sometimes worth trying a different approach.
I was wondering how the "go test" function was working as well, here is a start of an answer: http://golang.org/doc/faq#How_do_I_write_a_unit_test
Funny, because asserts in C are used to find bugs but not for "error handling and reporting".
If a speed sensitive function in C is documented to work for integers in the range 0 < x < 256, then it makes sense to put in an assert() as a courtesy to the users of the function.
It does not make sense in every situation to do a range check and return an error, or worse, "panic" (the latter didn't work for the Ariane 5).
Losing asserts doesn't eliminate either option. It simply requires you to have exicit error handling or a panic. This is the point.
The assert() is just to make it fail until you have the right value for the variable its testing.
However, there is the very good "Learn Go in Y Minutes" by Sonia Keys, which takes a similar approach but is more idiomatic, thorough, and concise: http://learnxinyminutes.com/docs/go/
> package go_koans
Hmm. I wouldn't trust this very much.The import statement at the top of the file can clarify what the origin of a package is, but in the program body itself, the package name should make the library feel as natural as "fmt" or "io" or "math".
To add to what you said, the asserts are only there to test your knowledge of the correct value of the variable.
|~/go-koans - [master] » go test
about_basics.go:4
assert(__bool__ == true) // what is truth?
exit status 1
FAIL _/Users/kev/go-koans 0.040s
Order is defined here too https://github.com/cdarwin/go-koans/blob/dc03120953195e70c62...