我是 Go 初学者,我正在尝试使用Cobra创建 CLI 。为了引导该项目,我使用了Cobra Generator,生成了一个命令,一个子命令,一切正常。
\n我现在有这种类型的布局:
\ncli\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\nRun Code Online (Sandbox Code Playgroud)\n这不适合我,假设我的项目打算有很多命令,或者很多命令命名空间,每个命令都由不同的团队拥有,它会变得非常混乱并且难以维护。我更喜欢这样的布局:
\ncli\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\nRun Code Online (Sandbox Code Playgroud)\n现在,我对 Go 中的包和导入的完成方式缺乏一些了解(即使在阅读了这里和那里的文档之后文档之后),但据我所知,只要它们属于多个 go 源文件,就可以跨多个源文件访问资源同一个包。但正如文档中所述,“实现可能要求包的所有源文件都位于同一目录中。”,因此要实现我想要的布局,我需要有多个包,例如每个命令一个包命名空间,我认为这很好(或者至少,我不明白这样做有什么问题)。这就是我尝试过的:
\ncommand目录cmd创建command.go文件移动到command到目录package条款从command.go为commandsubcommand.go这构建得很好,但是找不到命令(Error: unknown …
我正在学习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)