为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中使用 stdlib 中未导出的函数/类型

在 Go 中使用 stdlib 中未导出的函数/类型

Go
DIEA 2023-06-05 19:44:26
免责声明:是的,我知道这不是“应该做的”和“使用接口组合和委托”和“语言的作者更清楚”。然而,我面临着从标准库中复制粘贴并创建我自己的包,或者按照我的要求做的选择。所以请不要回复“你想做的是错误的,你是一个糟糕的开发者,你应该感到难过”。所以,在 Go 中我们有httpstdlib 包。这个包有许多处理 HTTP Range 标头和响应的函数(解析器,“偏移量+大小”的结构等等)。出于各种原因,我想使用一些非常相似ServeContent但工作方式有点不同的东西(长话短说 - 做体操所需的管道数量ReaderAt对于我想要完成的事情来说不是最佳的)所以我想Range自己解析 HTTP 标头,使用 stdlib 包中的实用函数/结构http,然后手动处理它们。ServeContent基本上,我想要:-)的更改版本有没有办法让我“重新打开” httpstdlib 包以使用它的未导出标识符?ABI 对我来说不是问题,因为源是我的,程序每次都是从头开始编译等等,它不需要与旧版/其他 Go 版本的二进制兼容性。即我能够确保构建将在特定的 Go 版本上完成,并且有测试来检查未导出的标识符是否消失。所以...如果有一个foo在 Go 标准库中调用的包,但它只公开了一个MagicMegamethod我不需要的东西,并且使用了usefulFunc我usefulStruct想要访问的东西,我有没有办法访问这些标识符?通过重新打开包,或使用其他方式......不涉及从 stdlib 复制粘贴数十行而不进行测试等。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

存在(相当可怕的)访问未导出符号的方法,但它需要大量的棘手代码,因此不太可能获得净胜利。

FWIW 我个人只是从标准库中复制我需要的代码并根据我的需要进行调整。


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信