gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:52 24 4
gpt4 key购买 nike

免责声明: 是的,我知道这不是“应该做的”、“使用接口(interface)组合和委托(delegate)”以及“语言的作者更清楚”。然而,我面临着从标准库中复制粘贴并创建我自己的包,或者按照我的要求做的选择。所以请不要回复“你想做的是错误的,你是一个糟糕的开发者,你应该感到难过。”

因此,在 Go 中我们有 http stdlib 包。这个包有许多处理 HTTP Range header 和响应的函数(解析器,“偏移量+大小”的结构等等)。出于各种原因,我想使用与 ServeContent 非常相似但工作方式略有不同的东西(长话短说 - 执行 ReaderAt 体操所需的管道数量不是最优的对于我想要完成的事情)所以我想自己解析 HTTP Range header ,使用 http stdlib 包中的实用函数/结构,然后手动处理它们。基本上,我想要一个更改版本的 ServeContent :-)

有没有办法让我“重新打开”http stdlib 包以使用它未导出的标识符? ABI 对我来说不是问题,因为源是我的,程序每次都是从头开始编译等等,它不需要与旧版/其他 Go 版本的二进制兼容性。 IE。我能够确保构建将在特定的 Go 版本上完成,并且有测试来检查未导出的标识符是否消失。所以……

如果 Go 标准库中有一个名为 foo 的包,但它只暴露了一个 MagicMegamethod 做我不需要的事情,并使用 我想访问 usefulFuncusefulStruct ,有没有办法让我访问这些标识符?通过重新打开包,或使用其他方式......不涉及从 stdlib 复制粘贴数十行而不进行测试等。

最佳答案

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

由于您已经排除了“不要这样做”的指示,似乎答案是否定的,或者使用我链接到的帖子中描述的方法(and this repo)。

FWIW 我个人只是从标准库中复制我需要的代码并根据我的需要进行调整。这可能比你写这个 SO 问题花费的时间更少:-)

关于go - 在 Go 中使用 stdlib 中未导出的函数/类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54737552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com