在Node.js中,有一个package.json文件包含模块上的几个元数据,例如它的名称,版本,作者,......
你怎么在Go这样做?
例如,我想将Go模块的作者与代码存储在某处.有一种常见的方法可以做到这一点吗?
如果Go包有大量文档,按照惯例,它应放在自己的文件中doc.go.
引用博客文章Godoc:记录Go代码:
该软件包对需要大量介绍性文档的软件包使用另一种约定:软件包注释放在其自己的文件doc.go中,该文件仅包含那些注释和package子句.
您可以在包文档中放置任何元数据.
如果您希望这些"元数据"也可以从代码中获得,您可以将它们存储在常量中,例如:
const (
Author = "Joe Big"
Version = "0.1.2.3"
ReleaseDate = "2015-11-08"
)
Run Code Online (Sandbox Code Playgroud)
请注意,导出的常量也将包含在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
)
Run Code Online (Sandbox Code Playgroud)
如果包含与日期或时间相关的常量(如ReleaseDate我的示例中所示),通常还可以提供一个布局,time.Parse()函数可以使用该布局将string日期/时间转换为值time.Time.对于上面的示例,它可能如下所示:
const ReleaseDateLayout = "2006-01-02" // Release date layout (for time.Parse())
Run Code Online (Sandbox Code Playgroud)
使用此布局,获取time.Time:
releaseDate, err := time.Parse(ReleaseDateLayout, ReleaseDate)
Run Code Online (Sandbox Code Playgroud)
另一种选择是提供导出的实用程序功能,这些功能处理元数据并提供有关它们的其他信息或以其他格式呈现它们.例如:
// 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
}
Run Code Online (Sandbox Code Playgroud)
一个用于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
}
Run Code Online (Sandbox Code Playgroud)
导出这些常量,因此可以从导入和使用它的其他包中访问它们.如果你不想这样,只需用小写字母开始它们,这样就不能从"外部"访问它们(它们不会被导出),例如:
// This constant will not be in godoc and is unreachable from other packages
const codeReviewer = "Jane Small" // Last code reviewer: first name - last name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |