Golang第一个程序HelloWorld编写与运行_go run命令入门

2次阅读

go run 要求文件必须在 package main 包中且含 func main(),仅当前目录下 .go 文件有效,不递归子目录,不生成可执行文件,中文路径或空格需规避。

Golang第一个程序HelloWorld编写与运行_go run命令入门

Go 程序必须放在 main 包里才能用 go run 运行

你写完 hello.go 却执行报错 no Go files in current Directory 或直接静默退出?大概率是包声明不对。go run 只认 package main,且文件里必须有 func main()。其他包名(比如 package hello)会被忽略。

  • package main 是硬性要求,不是约定;写成 package main1 或漏掉都不行
  • 文件里不能只有 fmt.Println("Hello") 而没包声明和 main 函数
  • 如果项目里混了测试文件(*_test.go),go run 默认不执行它们,但会报错说“multiple packages”,这时得显式指定文件:go run main.go

go run 不能跨目录直接运行子文件夹里的 main.go

你在 ./cmd/hello/main.go 写好了程序,但在项目根目录下敲 go run cmd/hello 却提示 no buildable Go source files?因为 go run 默认只扫描当前目录下的 .go 文件,不递归子目录,也不自动识别子目录为包路径。

  • 正确做法是进到那个目录再运行:cd cmd/hello && go run main.go
  • 或者显式列出完整路径:go run cmd/hello/main.go(注意不是 cmd/hello/
  • 如果子目录里有多个 .go 文件(比如 main.go + utils.go),必须一起列出来:go run cmd/hello/main.go cmd/hello/utils.go,否则可能报未定义引用

windows 下中文路径或空格会导致 go run 找不到文件

你在桌面新建了个文件夹叫 我的第一个 Go 程序,里面放了 main.go,结果 go run main.go 报错 no such file or directory —— 很可能是路径编码或 shell 解析问题,尤其在 CMD 或旧版 PowerShell 中。

  • 临时解法:把项目移到无中文、无空格的路径,比如 C:gocodehello
  • PowerShell 用户可尝试用引号包裹:go run ".我的第一个 Go 程序main.go",但不保证 100% 成功
  • 根本规避方式:从一开始就在终端用 mkdir hello && cd hello 创建路径,避免手动拖拽或资源管理器建带空格/中文的文件夹

go run 编译后立刻执行,但不会生成可执行文件

你执行完 go run main.go 看到输出,顺手去当前目录找 main.exe(Windows)或 mainmacos/linux),发现根本没有——这不是 bug,是设计如此。go run 的作用就是「编译 + 运行 + 清理临时产物」,它不保留二进制。

立即学习go语言免费学习笔记(深入)”;

  • 要生成可执行文件,改用 go buildgo build -o hello main.go
  • go run 每次都重新编译,适合快速验证;go build 适合交付或反复运行
  • 注意:如果 main.go 引用了本地相对路径的模块(比如 import "./util"),go run 会失败,因为 Go 1.11+ 默认启用 module 模式,应改用 go mod init 初始化后再导入

事情说清了就结束

text=ZqhQzanResources