Go入门强调实践先行:装好即跑,go run一行命令输出“Hello, World!”即入门;需验证go version、GOPATH、GO111MODULE三环境变量;首文件须手动编写,理解package、import、main;变量声明优先用:=但限函数内;并发从go关键字起步,基础且必需。
go 不是“先学完语法再写代码”,而是装好就能跑,跑通就入门。你不需要 java 那套环境配置、maven 依赖、jvm 参数调优——go run 一行命令,fmt.println 一调,输出 “hello, world!” 就算正式进门槛了。
装完立刻验证:别跳过 go version
很多人卡在第一步不是因为不会装,而是没确认装对了。Windows 下载 MSI 安装包双击就行;Linux/macOS 用 wget + tar 解压后,必须补全三行环境变量:PATH(让系统找到 go 命令)、GOPATH(默认工作区)、GO111MODULE=on(强制启用模块管理)。漏掉任意一条,后续 go get 或 go build 都可能静默失败或拉错依赖。
-
go version输出带linux/amd64或darwin/arm64才算成功,只报command not found说明PATH没生效 -
go env GOPATH应该返回类似/home/xxx/go,不是空或$HOME/go字面量(那是没执行source) -
go list -m在空目录下运行,若报no modules是正常;若报cannot find module providing package,大概率是GO111MODULE没开
写第一个文件:别用 IDE 新建项目
VS Code 装了 Go 插件很香,但新手第一课必须手动建 hello.go ——不靠任何模板、不点“新建 Go Module”,就纯文本编辑器里敲四行:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
然后终端进该目录,直接 go run hello.go。这一步绕不开:它强制你理解 package main 是可执行入口、import 是显式声明依赖、main() 是唯一启动函数。IDE 自动生成的 go.mod 文件反而会掩盖这些基础约束。
- 如果报
undefined: fmt,说明import "fmt"缺失或引号用了中文符号 - 如果报
missing function body,检查func main()后有没有漏掉左大括号{ - 不要提前加
go mod init myapp——没导入第三方包时,go.mod纯属冗余
变量声明:优先用 :=,但得知道它不能用在哪
var name string = "Alice" 和 name := "Alice" 效果一样,但后者更常用。关键限制是::= 只能在函数内部用,且左侧变量名必须是首次出现——这意味着你不能在包级(函数外)用它声明变量,也不能在 if 分支里重复声明同名变量。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- 包级变量必须用
var,例如var port = 8080(类型可省略,由值推导) for i := 0; i 中的 <code>i是:=声明的局部变量,循环外不可见-
if x > 0 { y := 10 }里的y出了}就失效,外面fmt.Println(y)会编译报错
并发不是选修课:从 go 关键字开始练
Go 的并发不是“等你学会线程池再说”,而是和 if 一样基础。写个打印 1~3 的循环,加一行 go 就变成并发:
func main() {
for i := 1; i <p>这例子故意暴露问题:没有同步机制时,goroutine 执行不可控。但它让你立刻感知到 <code>go</code> 的轻量——不用 <code>new Thread()</code>、不用 <code>start()</code>,一个关键字就起一个“协程”。后续学 <code>channel</code> 或 <code>sync.WaitGroup</code> 才是为它收尾,而不是绕开它。</p>
- 删掉
time.Sleep,大概率什么也不输出——主 goroutine 结束,程序立即退出 -
go fmt.Println(i)中的i是循环变量,闭包捕获的是地址,所有 goroutine 可能都打4(循环结束值),修复方式是传参:go func(n int) { fmt.Println(n) }(i) - 别一上来就写
select或context——先用go + time.Sleep感受调度,比看理论快十倍
真正卡住新手的,从来不是 goroutine 怎么写,而是 go run 报错时不知道该查哪一行环境变量、:= 在包级失效时硬生生改成 var 却忘了补类型、或者并发输出为空时以为代码错了,其实只是少了一行 time.Sleep。把这些“运行时瞬间”盯住,比读十页语法文档管用。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










