梳理 Go 的变量声明、结构体与方法、隐式接口、goroutine 与 channel、error 处理和 defer 用法,代码简洁可运行,适合写服务端程序时快速翻查。
以下片段默认位于 main 包内,按需导入对应包。
变量与常量
短声明符号在函数内使用,包级别只能用变量声明;常量配合自增枚举能生成一组连续值,比手写数字清晰。未使用的局部变量和导入包都会直接编译报错,别留死代码。
const ( A = iota; B; C )
结构体与方法
用组合代替继承;方法接收者分值与指针两种,需要修改原字段时必须用指针接收者。结构体字段首字母大写才对包外可见,小写只在包内访问,别指望反射绕过。
type User struct { ID int }
接口
接口隐式实现,只要方法集匹配就算实现,推荐定义只有一个方法的小接口。空接口取值用类型断言或类型分支还原具体类型,断言记得接第二个返回值判断成功与否。
var v any = 42
goroutine 与 channel
go 启动轻量协程,通道负责通信;写完要关闭,读侧用 range 自动结束,select 配合定时器做超时控制。无缓冲通道会阻塞到接收方就绪,排查死锁先确认收发是否配对。
ch := make(chan int, 2)
error 处理
错误是普通值,显式返回并逐层判断;用包装动词保留原始错误,之后还能用标准库的判断函数追溯,别拿字符串内容做比较,上下文能省掉大量排查时间。
if err != nil { return err }
defer
defer 在函数返回前按后进先出执行,常用于关闭文件、释放锁,也能配合恢复函数兜住崩溃。注意循环里别堆积 defer,它们要到函数结束才真正执行,容易攒出一堆连接。
defer fmt.Println("done")