1 回答
TA贡献1802条经验 获得超10个赞
如果 Go 包有大量文档,按照惯例,它应该放在自己的文件doc.go.
引自博客文章Godoc:记录 Go 代码:
对于需要大量介绍性文档的包,该包使用另一种约定:包注释放置在其自己的文件 doc.go 中,该文件仅包含那些注释和一个包子句。
您可以在包文档本身中放置任何元数据。
如果您希望这些“元数据”也可以从代码中获得,您可以将它们存储在常量中,例如:
const (
Author = "Joe Big"
Version = "0.1.2.3"
ReleaseDate = "2015-11-08"
)
请注意,导出的常量也将包含在 godoc 中,除了它们也可以从代码中获得。
您也可以评论这些行,评论也将包含在 godoc 中。这些注释可以清楚地表明它们是什么,例如:
const (
Author = "Joe Big" // Package author: first name - last name
Version = "0.1.2.3" // Package version: major.minor.maintenance.revision
ReleaseDate = "2015-11-08" // Release date: year-month-day
)
元数据的元数据
如果您包含与日期或时间相关的常量(如ReleaseDate在我的示例中),还提供一个布局通常很有用,该布局可由time.Parse()函数使用以将string日期/时间转换为time.Time. 对于上面的示例,它可能如下所示:
const ReleaseDateLayout = "2006-01-02" // Release date layout (for time.Parse())
使用此布局,获得time.Time:
releaseDate, err := time.Parse(ReleaseDateLayout, ReleaseDate)
另一种选择是提供导出的实用程序函数,用于处理元数据并提供有关它们的其他信息或以另一种格式呈现它们。例如:
// GetReleaseDate returns the release date as a value of time.Time.
func GetReleaseDate() time.Time {
t, err := time.Parse(ReleaseDateLayout, ReleaseDate)
if err != nil {
panic(err)
}
return t
}
一个用于Version:
// GetVersion returns the parts of the Version as a slice:
// {major, minor, maintenance, revision}
func GetVersion() []int {
vs := []int{}
for _, s := range strings.Split(Version, ".") {
if v, err := strconv.Atoi(s); err != nil {
panic(err)
} else {
vs = append(vs, v)
}
}
return vs
}
私有元数据
这些常量被导出,因此可以从其他导入和使用它的包中访问它们。如果您不希望那样,只需以小写字母开头,这样就无法从“外部”访问它们(它们不会被导出),例如:
// This constant will not be in godoc and is unreachable from other packages
const codeReviewer = "Jane Small" // Last code reviewer: first name - last name
- 1 回答
- 0 关注
- 197 浏览
添加回答
举报