It's the same for as long as I can remember. IMO, this is permitted,
in contrast to an unused import or variable, because it _may_ become
used when referenced/called from other file of the same package, which
may be included in the build only conditionally. Either through build
tags of by any other means, including for example naming it explicitly
in the compiler's command line.
> In the meantime, how can I detect dead code like this, for instance private
> functions not called in the package?
Probably only using go/{build,parse,ast,types,...}.
-j