能跑通go run就算成功,只需go 1.16+、两行代码(package main和func main())及一个hello.go文件;无需初始化模块、不依赖gopath、也不用配环境变量。

能跑通 go run 就算成功,不需要初始化模块、不依赖 GOPATH、也不用配环境变量——只要你装的是 Go 1.16+,两行代码加一个 main.go 文件就足够。
package main 和 func main() 缺一不可
Go 不靠文件名或命令行参数找入口,只认两个东西:package main 和 func main()。漏掉任一个,go run 直接报错,比如 no main module found 或 cannot run non-main package。
-
package main必须是文件第一行(非注释),不能写成package hello、package Main或package main1 -
func main()必须小写main,不能带参数、不能有返回值(Go 强制) - 如果目录下有多个
.go文件,且其中混入了非main包(比如package utils),go run *.go会报multiple packages—— 此时得显式指定:go run main.go
fmt.Println 是最安全的输出方式
新手常误用 print(Go 没这个函数)、fmt.Print(不换行,容易让终端输出粘连)、或 fmt.Printf(格式字符串不匹配会 panic)。fmt.Println 自动加换行、自动处理类型、不校验占位符,容错率最高。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 调试时写
fmt.Println("name:", name)比fmt.Printf("name: %s", name)更稳 - 别导入
"fmt"却不用——Go 编译器会直接拒绝:imported and not used: "fmt" -
fmt.Println首字母必须大写;fmt.println或fmt.PrintLn全部报错
go run hello.go 的实际执行条件
go run 默认只扫描当前目录下的 .go 文件,不递归子目录,也不识别路径为包名。它对路径和文件名很敏感。
- 中文路径或含空格的目录(如
我的第一个 Go 程序)在 Windows CMD 或旧版 PowerShell 下容易触发no such file or directory - 想运行
./cmd/hello/main.go?不能go run cmd/hello,得写全路径:go run cmd/hello/main.go - 如果该目录下还有
utils.go,且main.go依赖它,必须一起列出:go run cmd/hello/main.go cmd/hello/utils.go - 没有
go.mod也能跑,但 Go 1.16+ 默认启用模块模式;若报go: cannot find main module,最简单解法是先go mod init tmp再go run main.go
Windows 终端中文乱码和路径编码问题
不是代码写错了,而是终端本身没设 UTF-8。即使 main.go 里写了中文字符串,CMD 或 PowerShell 默认用 GBK 编码,输出就是乱码。
- PowerShell 中临时切 UTF-8:
[Console]::OutputEncoding = [Text.UTF8Encoding]::new() - CMD 中执行:
chcp 65001(切换到 UTF-8 页) - 更彻底的方案:改用 Windows Terminal + 支持 UTF-8 的字体(如 Cascadia Code)
- 注意:VS Code 内置终端默认 UTF-8,一般不会乱码;但外部终端(尤其老旧环境)要单独确认
真正卡住人的地方往往不在语法,而在 package main 是否真在第一行、go run 是否真的只看到了你想让它看到的文件、以及 Windows 终端是否悄悄用了错误的编码——这些细节不报语法错误,但会让程序静默失败或输出异常。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










