This adds a new build tag named "safe" which serves the exact same
purpose as the current "disableunsafe" tag. This is being done, as
recommended by @shurcooL, since it is emerging as the standard way to do
it in several high profile packages, it mirrors the "unsafe" package
nicely, it is shorter, and users generally seem to prefer it.
However, to avoid breaking existing infrastructure, the disableunsafe
tag is still available and simply is being deprecated.
This commit adds logic to gracefully the internal reflect.Value flag bit
changes as of golang commit adf9b30e5594 while maintaining support all
the back to Go 1.0.
It accomplishes this by adding code to the init time inspection to
detect the change and set the flag positions accordingly.
While here, also removes a TODO comment since it was already done
previously.
This commit adds support for compiling spew without the unsafe package.
When compiled without the unsafe package, some of the more advanced
features such as invoking stringers on pointers from non-pointer
variables and unexported struct fields are not available.
By default, spew will be compiled in the limited mode for Google App
Engine since the unsafe package is not available there. Additionally,
spew can be compiled without the unsafe package manually by specifying
the "disableunsafe" build tag.
Finally, a new package-level constant named "UnsafeDisabled" has been
exposed which can be used to programmatically determine if spew was
compiled with access to the unsafe package.