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

Go 项目结构以在单个存储库中生成具有相同名称的库和 cli

Go 项目结构以在单个存储库中生成具有相同名称的库和 cli

Go
翻阅古今 2022-04-20 17:41:31
如何设置项目结构以在单个存储库中生成具有相同名称的库和 cli?假设我的项目名称是project. 我想使它可以使用名称导入, 并在安装时 project具有名称的可执行二进制文件。我目前的设置是这样的:projectgo gethost.com/project/    project/        main.go    core/        project.go然后,当安装时:go get host.com/project/project它安装project为可执行文件,core作为依赖项。在 core/project.go文件中,包有这个:package project问题是它是通过以下方式导入的:import (    "host.com/project/core")project它作为名称空间导出,不core违反 go 的约定。我怎样才能做到这一点?
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

这不是惯例,您可以随心所欲地做,但通常的做法是cmd在项目根目录中有一个文件夹,所有可执行文件都在该文件夹下,每个文件夹都是自己的文件夹。


因此,在您的情况下,一个好的解决方案可能很简单:


host.com/project/

    cmd/

        project/

            project.go

    filea.go

    fileb.go

在filea.go和fileb.go包声明应该是:


package project

在cmd/project/project.go包和导入声明中应该是:


package main


import "host.com/project"

当然如果你的项目比较复杂,你可以在项目根目录下创建更多的包,它可能有多个命令(多个main包),例如:


host.com/project/

    cmd/

        project/

            project.go

        prjtool/

            prjtool.go

    packagex/

        x.go

    packagey/

        y.go

    filea.go

    fileb.go

遵循此布局的示例是非常流行的 Go Delve 调试器(目前 4.5k 星),可在https://github.com/derekparker/delve获得。


一个非常复杂的存储库示例是golang.org/x/tools包,它是多个基本 Go 工具的集合,可在https://github.com/golang/tools/获得。它的cmd文件夹包含 20 多个子文件夹(命令),许多工具(main包)甚至由多个.go文件组成(但每个文件都使用package main声明,形成一个可执行文件的包)。


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

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