小编aTo*_*Tom的帖子

如何将 cobra 子命令源放入单独的文件夹中

我是 Go 初学者,我正在尝试使用Cobra创建 CLI 。为了引导该项目,我使用了Cobra Generator,生成了一个命令,一个子命令,一切正常。

\n

我现在有这种类型的布局:

\n
cli\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmd\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 command.go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 root.go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subcommand.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n
Run Code Online (Sandbox Code Playgroud)\n

这不适合我,假设我的项目打算有很多命令,或者很多命令命名空间,每个命令都由不同的团队拥有,它会变得非常混乱并且难以维护。我更喜欢这样的布局:

\n
cli\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmd\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 command\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 command.go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subcommand.go\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 root.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n
Run Code Online (Sandbox Code Playgroud)\n

现在,我对 Go 中的包和导入的完成方式缺乏一些了解(即使在阅读了这里那里的文档之后文档之后),但据我所知,只要它们属于多个 go 源文件,就可以跨多个源文件访问资源同一个包。但正如文档中所述,“实现可能要求包的所有源文件都位于同一目录中。”,因此要实现我想要的布局,我需要有多个包,例如每个命令一个包命名空间,我认为这很好(或者至少,我不明白这样做有什么问题)。这就是我尝试过的:

\n
    \n
  • 在里面创建一个command目录cmd创建
  • \n
  • command.go文件移动到command到目录
  • \n
  • package条款从command.gocommand
  • \n
  • 做同样的事subcommand.go
  • \n
\n

这构建得很好,但是找不到命令(Error: unknown …

go go-cobra

9
推荐指数
1
解决办法
5037
查看次数

如何在c ++中使用接口

我正在学习C++,我无法理解接口的工作原理.我设置了一个不起作用的小例子,我不明白我做错了什么.

我已经阅读了这个答案,这有助于我宣布界面,但(即使我仍然不完全理解声明)我现在关注的更多是关于用法.我也读过这个答案,但是,我仍然无法使用我的界面,请看这个例子:

shape.h

#ifndef SHAPE_H
#define SHAPE_H

class Shape
{
public:
    virtual ~Shape(){}
    virtual int getArea() = 0;
};

#endif // SHAPE_H
Run Code Online (Sandbox Code Playgroud)

rectangle.h

#ifndef RECTANGLE_H
#define RECTANGLE_H

#include "shape.h"

class Rectangle : public Shape
{
public:
    Rectangle(){}
    Rectangle(int w, int h) : width{w}, height{h} {}
    virtual int getArea();
private:
    int width = 0;
    int height = 0;
};

#endif // RECTANGLE_H
Run Code Online (Sandbox Code Playgroud)

rectangle.cpp

#include "rectangle.h"

int Rectangle::getArea()
{
    return width * height;
}
Run Code Online (Sandbox Code Playgroud)

weird.h

#ifndef WEIRD_H
#define …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
67
查看次数

标签 统计

c++ ×1

go ×1

go-cobra ×1