在 Go 中通过 Godoc 记录私有结构上的 public 方法

Documenting public methods on private structs via Godoc in Go

我有一个私有结构(实际上不止一个,我在这个例子中简化了一点),我有一个 public 函数,它满足 public 接口。 此结构是通过工厂方法(NewX 样式)创建的:

package godocprivate

type PublicInterface interface {
    PublicFunction()
}

type privatestruct struct {
}

func NewPublic() *privatestruct {
    ps := &privatestruct{}
    return ps
}

// PublicFunction does something to be documented
func (self *privatestruct) PublicFunction() {
}

不能使工厂方法return成为public接口,因为还有其他接口可以在我的项目中对 returned 值感到满意。

我确实想通过 godoc 记录 PublicFunction(),但因为它在私有结构上,所以没有显示:

是否有任何方法、技巧、解决方法等使 privatestruct.PublicFunction() 在 Godoc 中可见?

我的实际用例更为严重:我确实有不止一个私有结构。它们都满足 PublicInterface,但它们各自的 PublicFunction 实现的内部工作原理不同,因此它们的文档也需要不同......

PublicFunction 使用 PublicStruct 其私有字段将与私有文档一起私有。例如,

package godocprivate

type PublicInterface interface {
    PublicFunction()
}

type privatestruct struct {
}

// PublicStruct is something to be documented except for private fields
type PublicStruct struct {
    privatestruct
}

func NewPublic() *PublicStruct {
    ps := &PublicStruct{}
    return ps
}

// PublicFunction does something to be documented
func (p *PublicStruct) PublicFunction() {
}

创建 PublicStruct 时,每个字段的初始值为零。如果这还不够,请引入工厂布尔值。例如,

package godocprivate

type PublicInterface interface {
    PublicFunction()
}

type privatestruct struct {
}

// PublicStruct is something to be documented except for private fields
type PublicStruct struct {
    factory bool
    privatestruct
}

func NewPublic() *PublicStruct {
    ps := &PublicStruct{factory: true}
    return ps
}

// PublicFunction does something to be documented
func (p *PublicStruct) PublicFunction() {
    if !p.factory {
        panic("Use NewPublic")
    }
}