Golang中'go run .'是什么意思?:)
Golang中’go run .'是什么意思?:)
你好,
go run main.go 和 go run . 有什么区别?
当我使用 go run . 时,我运行的是什么?😃(抱歉英语不好)
(也许这张图片可以帮助你理解)

谢谢 🙂
你好,@raifpy,
当你运行 go run . 时,go 程序会在当前目录(“.” 就代表当前目录)中寻找一个包含 main 包的包,并且在该包的某个文件中找到 main 函数。
当你运行 go run main.go 时,go 程序不会去检查目录中哪个文件包含 main 函数,而是直接在 main.go 文件中寻找该函数并执行它,其效果与 go run . 相同。据我所知,唯一的区别在于,如果你更改了文件名(例如,从 main.go 改为 mypackage.go 或其他名字),那么 go run main.go 显然会停止工作,而 go run . 则会继续正常工作。
func main() {
fmt.Println("hello world")
}
更多关于Golang中'go run .'是什么意思?:)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你尝试过阅读手册(go 命令 - cmd/go - Go 包)吗?
编译和运行 Go 程序
用法:
go run [构建标志] [-exec xprog] 包 [参数…]
Run 编译并运行指定的主 Go 包。通常,该包被指定为来自单个目录的 .go 源文件列表,但它也可以是导入路径、文件系统路径或匹配单个已知包的模式,例如
go run .或go run my/cmd。默认情况下,
go run直接运行编译后的二进制文件:a.out 参数…。如果给出了-exec标志,go run会使用 xprog 调用二进制文件:
xprog a.out 参数…。如果未给出
-exec标志,并且 GOOS 或 GOARCH 与系统默认值不同,并且能在当前搜索路径中找到名为go_$GOOS_$GOARCH_exec的程序,那么go run会使用该程序调用二进制文件,例如go_js_wasm_exec a.out 参数…。这允许在模拟器或其他执行方法可用时执行交叉编译的程序。Run 的退出状态并非编译后二进制文件的退出状态。
go run . 表示运行当前目录下的主包(main package)。它会自动查找当前目录中所有 .go 文件,编译并执行其中的 main 函数。
区别:
go run main.go:仅编译并运行指定的单个文件(main.go)。如果 main.go 依赖同目录下的其他文件,这些文件也会被自动包含。go run .:编译并运行当前目录下的所有.go文件,但要求其中必须包含一个main函数作为入口点。
示例: 假设目录结构如下:
project/
├── main.go
├── utils.go
└── config.go
main.go 内容:
package main
import "fmt"
func main() {
fmt.Println("Starting...")
result := Calculate(5, 3)
fmt.Println("Result:", result)
}
utils.go 内容:
package main
func Calculate(a, b int) int {
return a + b
}
运行方式:
go run main.go:Go 会自动找到依赖的 utils.go 并一起编译运行。go run .:效果相同,编译当前目录所有文件并运行。
特殊情况:
如果目录下没有 main 函数,go run . 会报错:
go run: no go files in .
注意:
go run . 不会递归处理子目录。如果需要运行子目录中的主包,可以指定路径:
go run ./cmd/myapp
两种方式都会在临时目录编译并立即执行,不会生成可执行文件。

