我是Go的新来者。 我非常喜欢这种语言,但是我很快意识到由于程序大小的增加,我需要开始分割文件。
没用,我遇到了障碍,因为我不知道如何使程序正常工作。
一些快速搜索使我找到了答案
通过键入
我写了以下自我回答的问题,以防止像我这样的其他人再次遇到这个障碍。
内特·芬奇(Nate Finch)指出:
Go run is ... really only meant to be used on very small programs, which generally only need a single file.
即使在UNIX上,
1 | go run: cannot run *_test.go files (something_test.go) |
它还会忽略构建限制,因此
关于使
1 | go build && ./<executable> |
Unix相关系统
在大多数情况下,
如果这会导致错误,请继续以下方法。
Windows系统(在其他情况下
令牌扩展在Windows命令行中不起作用,因此上述内容将不起作用并显示错误。由于当前的编译器限制,在某些情况下
在这种情况下,请使用
其中
如果您可能不知道可执行文件的名称,请首先
这两种方法将以最小的麻烦构建并运行当前目录中的所有.go文件。
- 如何在子文件夹的文件夹下运行* .go?
- 如果您使用Windows PowerShell,请执行以下操作: 。 foo.exe(而不是&&,而是;(点和逗号))
您可以使用以下bash结构运行所有
1 | go run $(ls -1 *.go | grep -v _test.go) |
- 这应该是公认的答案。 它为* nix开发人员解决了问题
-
我喜欢这样,但是将命令设置为别名时,该命令不能很好地播放。 带有
shopt 和!(...) 的r.sendeckys解决方案非常有效。
最好的方法是像这样运行它:
1 | go run !(*_test).go |
它会跳过所有测试文件,而这正是避免该错误所需的内容。
另一个建议:
1 | go build && ./<executable> |
有点烦人。您必须一直删除可执行文件,以免被git标记。您当然可以将其放在gitignore中,但是我很懒,这是一个额外的步骤。
- 不起作用" -bash:!:未找到事件"
-
@ user1872384,应先运行
shopt -s extglob 以启用!(...) 通配符语法
最后,我们现在可以使用:
1 | go run . |
谢谢:
https://github.com/golang/go/issues/22726#issuecomment-345841019
- 这应该是公认的答案
- 这是最好的和公认的答案
如果我正确理解您的问题,则需要导入其他代码作为库。
小例子
./testing/main.go:
1 2 3 4 5 6 7 8 9 | package main import"fmt" import L"testing/lib" func main() { fmt.Println("Hello from main()") L.Somefunc() } |
./testing/lib/somelib.go:
1 2 3 4 5 6 7 8 | package lib import"fmt" func Somefunc() { fmt.Println("Hello from Somefunc()") return } |
要启动-
-
这是Windows开发人员的正确答案。 就我而言,我必须使用完全限定的路径
import"github.comabacajhellolib" ,然后像sc := new(lib.ServiceControl) 一样使用它
这是我的解决方案:
1 | go run $(find . -name"*.go" -and -not -name"*_test.go" -maxdepth 1) |
我将其与别名结合使用,以使其易于运行命令行应用程序
1 2 3 | alias gorun='go run $(find . -name"*.go" -and -not -name"*_test.go" -maxdepth 1)' $ gorun param1 param2 |
只是用这个
1 | go run *.go |
假设您没有任何测试文件,它将正常工作
- 那绝对是我想要的! 谢谢!
-
在Windows上将无法使用。
CreateFile *.go: The filename, directory name, or volume label syntax is incorrect. - 但是现在,我们可以使用go run。 :)
在Windows上,我通常只向我的所有项目目录中添加一个test.bat:
1 2 3 | go build .\{project_name}.exe go clean |
效果很好。当然,将{project_name}替换为可执行文件的名称。可执行文件完成后,批处理脚本将继续进行清理。
对于尝试将
1 | //go:generate sh -c"go run path/*.go" |
对于窗口,以下工作:
打开cmd,然后转到文件夹所在的路径。然后键入以下命令,然后按Enter。
1 | go build |
之后,将创建一个可执行文件。然后在命令提示符下调用可执行文件。
如果可执行文件名为Project.exe,则键入以下内容,然后按Enter:
1 | Project.exe |