Disclaimer: yes I know that this is not "supposed to be done" and "use interface composition and delegation" and "the authors of the language know better". However, I am confronted with a choice of either copy-pasting from the standard library and creating my own packages, or doing what I am asking. So please do not reply with "What you want to do is wrong, you are a bad dev and you should feel bad."
So, in Go we have the http
stdlib package. This package has a number of functions for dealing with HTTP Range headers and responses (parsers, a struct for "offset+size" and so forth). For various reasons I want to use something that is very similar to ServeContent
but works a bit differently (long story short - the amount of plumbing needed to do the ReaderAt
gymnastics is suboptimal for what I want to accomplish) so I want to parse the HTTP Range
header myself, using the utility functions/structs from the http
stdlib package and then deal with them manually. Basically, I want a changed version of ServeContent
:-)
Is there a way for me to "reopen" the http
stdlib package to use it's unexported identifiers? ABI is not a concern for me as the source is mine, the program gets compiled from scratch every time etc. etc. and it does not need binary compatibility with older/other Go versions. I.e. I am able to ensure that the build is going to be done on a specific Go version and there are tests to check that an unexported identifier disappeared. So...
If there is a package called foo
in the Go standard library, but it only exposes a MagicMegamethod
that does the thing I do not need, and uses usefulFunc
and usefulStruct
that I want to get access to, is there a way for me to get access to those identifiers? Either by reopening the package, or using some other way... that does not involve copy-pasting dozens of lines from stdlib without tests etc.