当我使用标志包
// main.go
import (
...
"flag"
)
func main() {
...
flag.Parse()
switch flag.Arg(0) {
case "doSomething1":
...
case "doSomething2":
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果doSomething1参数为我打印了一些错误消息,无论我如何修复源代码,它都无法删除旧的错误代码并重新编译。
// command-line
# go build ./main.go
# ./main doSomething1
# error doSomething1 can not work
-- I fix my code
# ./main doSomething1
# error doSomething1 can not work
-- the error message also show me again
-- I have to delete main and build again
# rm ./main
# go build ./main.go
# ./main.go doSomething1
# doSomething1 now can work
Run Code Online (Sandbox Code Playgroud)
Go是一种编译语言。运行时go build,它将编译您的源代码并创建一个可执行二进制文件。这是执行时运行的内容./main doSomething1。
当您更改源代码并运行时./main doSomething1,无需再次编译,而仅运行先前构建(且未更改)的二进制文件。
要快速测试更改,请go run改用:
go run main.go doSomething1
Run Code Online (Sandbox Code Playgroud)
这将始终编译您的源代码,在一个临时文件夹中构建一个二进制文件,启动它并在应用程序退出后将其清除。
有关详细信息,请参阅构建什么版本?