我是Go的新人。我非常喜欢这种语言,但我很快意识到由于程序大小的增加,我需要开始分割文件。
go run main.go
(main.go是我的main()函数的文件)
没有工作,我打了一段时间的障碍,因为我不知道如何让我的程序正常工作。
一些快速搜索引导我回答
go run main.go other.go ..
通过键入我的package main
所包含的所有文件,我可以运行编程。然而,每次这样做都非常麻烦和令人沮丧。
我写了以下自我回答的问题,以防止像我这样的人再次遇到这个障碍。
答案 0 :(得分:62)
如Nate Finch所述:
Go run is ...真的只适用于非常小的程序,通常只需要一个文件。
即使在unix上,go run *.go
通常也不正确。在任何具有单元测试的项目中(并且每个项目都应该有单元测试),这将给出错误:
go run: cannot run *_test.go files (something_test.go)
它也会忽略构建限制,因此在Unix上编译(或尝试编译)_windows.go
文件,这不是你想要的。
有bit of discussion使go run
与其他go
命令一样工作,并且有一个开放的CL(5164)。 Go 1.4目前正在考虑中。与此同时,所有平台上推荐的解决方案是:
go build && ./<executable>
答案 1 :(得分:20)
Unix相关系统
在大多数情况下, go run *.go
就足够了。
如果这会导致错误,请继续执行以下方法。
Windows系统(以及go run *.go
不起作用的其他情况)
令牌扩展在Windows命令行中不起作用,因此上述操作无效并显示错误。由于当前的编译器限制,go run *.go
在某些情况下也可能无法在操作系统中运行。
在这些情况下,请使用
go build && foo.exe
其中foo.exe
是生成的.exe文件的名称。
如果您可能不知道可执行文件的名称是什么,首先
go build
并检查生成的.exe文件的名称。然后,使用包含文件名的方法。
这两种方法将以最小的麻烦构建并运行当前目录中的所有.go文件。
答案 2 :(得分:16)
最好的方法是像这样运行:
go run !(*_test).go
它会跳过所有测试文件,这正是您避免错误所需的。
另一个建议:
go build && ./<executable>
有点烦人。您必须始终删除可执行文件以避免被git标记。当然,你可以把它放在gitignore,但我很懒,这是一个额外的步骤。
答案 3 :(得分:16)
您可以使用此bash结构运行所有.go
个文件,不包括测试:
go run $(ls -1 *.go | grep -v _test.go)
答案 4 :(得分:4)
如果我理解你的问题,你需要导入其他代码作为库。
小例子
<强> ./测试/ main.go:强>
package main
import "fmt"
import L "testing/lib"
func main() {
fmt.Println("Hello from main()")
L.Somefunc()
}
<强> ./测试/ LIB / somelib.go:强>
package lib
import "fmt"
func Somefunc() {
fmt.Println("Hello from Somefunc()")
return
}
启动 - go run main.go
答案 5 :(得分:2)
只需使用此
go run *.go
假设你没有任何测试文件
答案 6 :(得分:2)
这是我的解决方案:
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
答案 7 :(得分:2)
最后我们可以使用:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyc.layoutManager = LinearLayoutManager(this)
val adapter = MyAdapter(
arrayOf("sd","sd2","sd2","sd2","sd2","s2d","s2d","sd",
"sd2","s2d","s2d","sd5","s8d","67sd","s76d")
)
recyc.adapter = adapter
}
感谢: https://github.com/golang/go/issues/22726#issuecomment-345841019
答案 8 :(得分:1)
在Windows上我通常只是在我的所有项目目录中添加一点 test.bat :
go build
.\{project_name}.exe
go clean
运作良好。当然,将{project_name}替换为可执行文件的名称。一旦可执行文件完成,批处理脚本就会继续进行清理。
答案 9 :(得分:0)
对于尝试结合使用go run
和go generate
的人们,解决方案可以是:
//go:generate sh -c "go run path/*.go"
答案 10 :(得分:0)
如果您在 Windows 上的 Vscode 终端中运行并且不了解工作区,请执行以下操作:
go run $(ls *.go)
答案 11 :(得分:-1)
对于窗口,以下工作: 打开cmd,然后转到文件夹所在的路径。然后键入以下命令,然后按Enter。
go build
在此一个可执行文件之后将被创建。然后在命令提示符下调用可执行文件。 如果您的可执行文件名为Project.exe,则键入以下内容,然后按Enter:
Project.exe