通过Gooc中的Godoc记录私有结构的公共方法

时间:2015-05-07 19:08:10

标签: go private godoc

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

This is how Godoc of the above looks like

是否有任何方法,技巧,解决方法等使得在Godoc中可以看到privatestruct.PublicFunction()?

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

1 个答案:

答案 0 :(得分: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")
    }
}