为了账号安全,请及时绑定邮箱和手机立即绑定

是否有将元数据添加到 Go 项目的通用方法?

是否有将元数据添加到 Go 项目的通用方法?

Go
心有法竹 2021-11-22 15:12:18
在 Node.js 中,有一个package.json文件包含模块的多个元数据,例如其名称、版本、作者……你如何在 Go 中做到这一点?例如,我想将 Go 模块的作者与代码一起存储在某个地方。有没有一种通用的方法来做到这一点?
查看完整描述

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


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信