-
值接收者传递副本,不修改原值,适合小型结构体和只读操作;指针接收者直接修改原对象,避免大结构体复制开销,推荐在需修改或结构体较大时使用,并保持同一类型方法接收者风格一致。
-
反引号字符串不支持变量插值,仅作纯字面量使用;它不转义任何字符(包括\n、${var}),保留全部空白与换行,适用于正则、SQL、YAML等需严格格式的场景。
-
Go1.12+才支持reflect.MapIter,应优先用reflect.Value.MapRange()安全遍历map;低于该版本需降级为MapKeys()+MapIndex(),并严格检查IsValid()和IsNil()以避免panic。
-
nats.Connect连不上JetStream是因服务端未启用,需加-js参数或配置jetstream块;js.Publish失败、消息丢失、重复消费等问题均源于JetStream未正确配置和使用。
-
net/http.Hijacker是Go标准库中用于劫持HTTP连接的接口,必须在需绕过HTTP协议栈直接操作底层TCP连接时使用,如WebSocket升级、HTTPS代理隧道、自定义二进制协议等;调用前响应未写出,且HTTP/2环境下不可用。
-
Go项目目录结构无强制规范,但cmd/下须按可执行名建子目录(如cmd/api),main.go仅做配置加载、依赖初始化和app.Run()调用;internal/是编译器级私有边界,外部导入即报错;测试文件必须与源码同目录同包且以_test.go结尾。
-
atomic.LoadUint64总返回0的根本原因是写操作未使用原子函数,如直接赋值counter=100或++counter,导致非原子写入不被原子读感知;必须配对使用atomic.StoreUint64或atomic.AddUint64等原子写操作,且确保uint64变量8字节对齐、类型严格匹配。
-
切片截取共享底层数组,修改子切片可能影响原数据;使用slice[i:j]语法,i为起始索引(含),j为结束索引(不含);省略i默认为0,省略j则到末尾;为避免共享应使用copy()创建副本;截取时需防止越界,建议封装安全截取函数;append可能导致底层数组重新分配,使用三参数切片arr[i:j:k]可控制容量,减少意外共享。
-
GoHTTPServer.Shutdown()无法等待WebSocket关闭,因其仅跟踪标准HTTPhandler生命周期,不感知已升级的WebSocket等长连接;必须手动管理:用sync.Map存储连接、主动发送CloseMessage、单独设置超时。
-
布隆过滤器不适合网络层CC拦截,因其无网络IO能力、不解析TCP包、不处理IP限流或TLS指纹,仅能判断key是否存在集合中,无法应对CC攻击的连接层和应用层特征。
-
访问者模式在Go中可通过接口和类型断言模拟实现。其核心是将操作逻辑从数据结构解耦,使新增操作无需修改结构本身。具体步骤为:1.定义Visitor接口,包含针对每种类型的处理函数;2.数据结构实现Accept方法接受访问者;3.每个结构体在其Accept方法中调用对应的访问者函数。此外还可使用反射、手动注册处理函数或闭包等方式变通实现。该模式适用于结构稳定而操作多变的场景,若结构频繁变动则可能增加复杂度。
-
核心是消息注册、语言匹配、上下文注入三步:message.LoadMessageFile仅注入catalog,Printer需显式绑定tag;go-i18n/v2要求active.zh-CN.json命名及{"description","translation"}结构;Accept-Language必须用language.ParseAcceptLanguage解析并matcher匹配。
-
Go程序不该手动fork守护化,因runtime状态无法安全复制,易致调度异常、信号丢失或卡死;应交由systemd以Type=simple管理,配合Restart=on-failure和StandardOutput=journal。
-
Go构建RESTfulJSON接口的核心是net/http包配合结构体序列化,需定义带json标签的导出字段结构体、用json.Decode解析请求体、json.Encode生成响应、正确设置Content-Type头及HTTP状态码。
-
测试多线程函数需解决执行顺序不可控、资源竞争和测试提前结束问题,应使用sync.WaitGroup或channel确保所有goroutine完成。