3 ms·
> Using pointers also means that clients of the library will need to perform their own nil checks where appropriate to prevent panics. In practice, as your Rus
by carbocation 12y ago
> Using pointers also means that clients of the library will need to perform their own nil checks where appropriate to prevent panics.
In practice, as your Rust comment alludes, I find working with nil properties in Go types (used to shuffle between the DB and JSON) to be quite painful. I end up keeping track of a lot more state than I really want to, and errors can be introduced subtly.
In Go, you can usually use a type's zero value without doing anything special. But if that type contains any nil properties, you can't presume this anymore. If I have:
type Thing struct {
ID int
Bad *string
}
I then have to do nil checks in every method that might handle Thing, or I have to make it accessible only via functions which perform those checks for me in advance. Either way, much less convenient.