Go 语言,你需要了解的一些规则

下面这些是 Go 语言本身的规则(编译器/运行时强制,或官方强烈约定)。

1. 包与可见性(你已经知道)

  • 一个目录 = 一个包,包名通常等于目录名。
  • 首字母大写导出,小写仅本包。
  • package main + func main() 才是可执行入口。
  • 只能 import 别的包,不能 import 单个文件;同包文件互相可见、不用 import。

2. 编译与依赖

  • 模块以 go.modmodule 名为 import 前缀(本仓库是 audit-review)。
  • 循环 import 禁止:A import B、B 再 import A 会编译失败。
  • 未使用的 import、未使用的局部变量是 编译错误_ 可丢掉不想用的值)。
  • 没有隐式类型转换:int32int64 必须显式转。

3. 零值与指针

  • 变量声明后就是零值:0""nilfalse,没有「未初始化」的垃圾值。
  • nil 指针解引用会 panic。
  • new(T) / &T{} 得到 *T;方法接收者常用指针,避免拷贝、允许修改。

4. 错误处理

  • 没有异常体系当主路径;约定返回 (result, error)
  • error == nil 才算成功;忽略 error 是合法语法,但是坏习惯。
  • panic 只用于真正不可恢复(配置都扫不进来);recover 一般只在框架中间件里。

5. 控制流

  • if err != nil { return ..., err } 是常态,没有 try/catch
  • defer:函数返回前执行(关文件、Cleanup()),后写的 defer 先执行。
  • for 是唯一循环;range 遍历切片/map/channel。
  • switch 不用写 break,默认不会落到下一分支(和 C 不同)。

6. 接口

  • 接口是 隐式实现 :有方法就算实现,不用写 implements
  • 小接口更常见(error 就一个 Error() string)。
  • 接口变量底层是「类型 + 值」;值为 nil 但带着类型时,== nil 可能是 false(踩坑点)。

7. 切片、map、append

  • 切片是对底层数组的视图:len / cap
  • append 可能换新数组,必须接住返回值
  • map 零值是 nil,读可以、写之前要 make
  • map 遍历顺序每次不一定相同。

8. 并发

  • go f() 开 goroutine,和线程不是 1:1。
  • channel 用来通信;向已关闭的 channel 发送会 panic。
  • 没有内置的「共享内存加锁就安全」保证,数据竞争要自己避免(sync.Mutex 或不要共享)。
  • init.go 里那种 go uc.createKnowledgeWithRetry 就是语言级的 goroutine。

9. 官方习惯(不是语法强制,但大家当规则用)

  • 对外方法第一个参数常常是 ctx context.Context(本仓库硬性要求)。
  • 短接收者名:func (s *AuditTaskService),不用 this
  • 错误先处理,成功逻辑往下写,少套一层 else
  • 包名小写、不用下划线:bootstrapaudit_task 是文件名,包名仍是 service / biz
  • 格式化用 gofmt / goimports,空格缩进、大括号风格都是固定的。

想系统过一遍,官方 A Tour of Go 比一次性背完整语言规范有效。

相关推荐
Data_Journal8 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy
yume_sibai8 小时前
12-Rust 性能优化指南(性能分析 + 内存优化 + SIMD + 并发优化 + 编译器优化 + 基准测试)
开发语言·性能优化·rust
萧瑟余晖8 小时前
Hibernate 核心原理与架构详解
开发语言·架构·hibernate
爱喝水的鱼丶8 小时前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
cidy_988 小时前
07 — Service 层:业务逻辑
后端
geovindu9 小时前
rust:Builder Pattern
开发语言·设计模式·rust·建造者模式
苍何9 小时前
用 GPT6 + Hyper3D MCP 搓 3D 个人网站,太夯了!(附教程)
后端
cidy_989 小时前
05 — 分层架构设计思想
后端
白远山9 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
虎虎(_ _)。゜zzZ9 小时前
SQLAlchemy入门教程
数据库·后端·python·sql·ai·sqlalchemy