我是Go的新手,非常喜欢这种语言,但很快意识到由于程序规模增加,我需要开始分割我的文件。
go run main.go
(其中main.go是我的主函数文件)
不起作用,我遭遇了障碍,因为我不知道如何让我的程序运行起来。
通过一些快速搜索,我找到了答案:
go run main.go other.go ..
通过键入所有package main
包含的文件,我可以让程序运行。 但是,每次都这样做非常麻烦和令人沮丧。
我编写了以下自问自答的问题,以防止像我这样的其他人再次遇到此障碍。
我是Go的新手,非常喜欢这种语言,但很快意识到由于程序规模增加,我需要开始分割我的文件。
go run main.go
(其中main.go是我的主函数文件)
不起作用,我遭遇了障碍,因为我不知道如何让我的程序运行起来。
通过一些快速搜索,我找到了答案:
go run main.go other.go ..
通过键入所有package main
包含的文件,我可以让程序运行。 但是,每次都这样做非常麻烦和令人沮丧。
我编写了以下自问自答的问题,以防止像我这样的其他人再次遇到此障碍。
正如Nate Finch所指出的:
Go run只适用于非常小的程序,通常只需要一个单独的文件。
即使在Unix上,go run *.go
也经常不正确。在任何带有单元测试的项目中(每个项目都应该有单元测试),这将会产生错误:
go run: cannot run *_test.go files (something_test.go)
_windows.go
文件,这不是您想要的。
已经有一些讨论,让 go run
像其他 go
命令一样工作,并且有一个开放的CL (5164)。目前正在考虑在Go 1.4中使用。与此同时,在所有平台上推荐的解决方案是:
go build && ./<executable>
你可以使用以下bash命令来运行所有.go
文件,但不包含测试文件:
go run $(ls -1 *.go | grep -v _test.go)
shopt
和!(...)
非常有效。 - codyUnix相关系统
在大多数情况下,go run *.go
就已经足够了。
如果出现错误,请使用以下方法:
Windows系统(以及其他一些go run *.go
无法工作的情况)
在Windows命令行中,标记扩展不起作用,因此上述方法将无法正常工作并显示错误。 在某些情况下,由于当前编译器的限制,go run *.go
也可能无法在操作系统中正常工作。
在这些情况下,请使用
go build && foo.exe
其中foo.exe
是生成的.exe文件的名称。 如果您不知道可执行文件的名称,请首先运行
go build
然后检查生成的.exe文件的名称。 然后使用包括文件名的方法.
这两种方法将构建并运行当前目录中的所有.go文件,而不需要太多麻烦。
filepath.Abs(filepath.Dir(os.Args[0]))
不是临时目录? - Polv最好的方法是这样运行:
go run !(*_test).go
它会跳过所有测试文件,这正是您需要避免错误的方法。
另一个建议:
go build && ./<executable>
这有点烦人。你不得不一直删除可执行文件以避免被 Git 标记。当然,你可以将其放入 gitignore 中,但是我很懒,这需要额外的步骤。
shopt -s extglob
来启用!(...)
通配符语法。 - Johnny Wongpackage main
import "fmt"
import L "testing/lib"
func main() {
fmt.Println("Hello from main()")
L.Somefunc()
}
./testing/lib/somelib.go:
package lib
import "fmt"
func Somefunc() {
fmt.Println("Hello from Somefunc()")
return
}
启动命令 - go run main.go
import "github.com/abacaj/hello/lib"
,然后像这样使用它 sc := new(lib.ServiceControl)
。 - AntonB只需使用这个
go run *.go
CreateFile *.go: 文件名、目录名或卷标语法不正确。
- Nato Boramgo run .
。 - Sajidur Rahmango run $(ls *.go)
这是我的解决方案:
go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)
alias gorun='go run $(find . -name "*.go" -and -not -name "*_test.go" -maxdepth 1)'
$ gorun param1 param2
go build
.\{project_name}.exe
go clean
.
时,我该怎么做呢? - Zyl