为什么要从公用程序调用私有函数,而不是在公用程序中实现代码?

时间:2018-09-28 19:58:35

标签: go

我在golang src中看到了很多这样的代码:

func Open(path string) (*Plugin, error) {
    return open(path)
}

func open() {
  // etc
}

一个私有函数被公众调用。为什么不只是:

func Open(path string) (*Plugin, error) {
    // code of open here
}

ref:https://golang.org/src/plugin/plugin.go?s=1065:1104#L21

我确实知道有时候这很有意义,特别是如果使用open的功能更多。但是事实并非如此。

这是Golang的某种组织方式吗?

1 个答案:

答案 0 :(得分:5)

在这种情况下,这似乎是因为实际实现取决于操作系统。

插件实现plugin_dlopen.go仅用于OSX和Linux,替代方案plugin_stubs.go用于其他所有功能(仅包含伪函数,因为尚无其他系统实现。)

这允许您使用build tags将与操作系统相关的代码保存在一个文件中,同时将通用代码,公共API和公共API的文档保存在一个位置。