2

我有一个私有结构(实际上不止一个,我为这个例子做了一点简化),我有一个公共函数,它满足一个公共接口。这个结构是通过工厂方法(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() {
}

不能让工厂方法返回公共接口,因为在我的项目中,返回值还有其他接口需要满足。

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

这就是上面的 Godoc 的样子

有什么方法、技巧、解决方法等让 privatestruct.PublicFunction() 在 Godoc 中可见?

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

4

1 回答 1

1

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")
    }
}
于 2015-05-07T19:29:13.320 回答