梳理 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")