-
net.Listener不能直接读写消息,因其仅负责接受连接并返回net.Conn实例,收发数据必须通过该Conn操作;Accept()阻塞返回新Conn,需为每个Conn单独启goroutine处理,且Read/Write是无边界的字节流,需自行处理粘包与协议。
-
Go字符串不可变,安全切片用标准语法;需修改时应操作[]byte,非安全指针操作仅限特殊场景且不推荐。
-
Go的error类型与系统负载无关,需手动采集NumGoroutine和MemStats等指标并注入自定义LoadError,HTTPhandler中应主动返回503状态码及Retry-After头。
-
用gotest测并发需手动启goroutine并用sync.WaitGroup等待完成,避免time.Sleep;t.Parallel()仅让不同TestXxx函数并行,不控制函数内并发;正确做法是构造可验证副作用、显式同步、隔离共享状态,并配合-race检测竞态。
-
必须异步落库,否则同步写库会阻塞WebSocket读协程导致超时断连;应通过带缓冲channel解耦接收与存储,并建(room_id,created_at)联合索引优化查询。
-
WaitGroup通过Add、Done、Wait方法实现goroutine同步,主协程调用Add设置任务数,子协程完成时调用Done,主协程Wait阻塞直至所有任务结束,常用于并发请求、批量处理等场景。
-
不能直接用bcrypt.GenerateFromPassword而不设成本因子,因其默认值10不适用所有场景:过低易被暴力破解,过高拖慢响应;需按CPU实测调整,新项目建议起始用12,并通过配置项动态管理。
-
Go语言通过net/http包原生支持HTTPS和HTTP/2,只需提供合法TLS证书与私钥,调用http.ListenAndServeTLS即可启动安全服务;开发可用自签名证书,生产推荐Let’sEncrypt;需注意证书格式、路径权限、端口配置及重定向设置。
-
临界区是访问共享资源的代码段,如修改全局变量或操作公共数据结构。多个goroutine同时进入会导致数据竞争,例如并发执行i++可能结果异常。Go通过sync.Mutex的Lock()和Unlock()方法保护临界区:varmusync.Mutex;mu.Lock();defermu.Unlock();counter++。Lock()阻塞其他goroutine直至Unlock()释放锁,defer确保即使panic也能释放,避免死锁。适用于小段关键代码,如更新map或结构体字段,但应避免在锁内执行耗时操作
-
首先定义图书与用户结构体,包含ID、标题、作者等关键字段;接着实现增删改查及借阅功能函数,使用切片存储数据;通过JSON文件或SQLite实现数据持久化;最后提供命令行或HTTP接口交互,完成系统核心流程。
-
三色标记法标的是对象可达性确定程度:白色=尚未证明可达、灰色=待扫描(工作队列)、黑色=已扫描但非绝对安全;混合写屏障需栈标黑+堆插入+删除屏障协同防漏标;GC仅有两次极短STW,分别用于初始化标记和确保栈标记完成。
-
必须等待JS渲染完成再获取head内容,因SPA框架异步注入meta/title;推荐用document.readyState判断+短延时,优先InnerHTML而非OuterHTML,动态改title比改DOM安全,需适配各框架渲染完成信号。
-
MarshalJSON未生效主因是接收者类型不匹配:必须用指针接收者且序列化值类型需一致;传值调用时若只实现*MyStruct.MarshalJSON则方法被忽略。
-
Wire不是自动注入而是编译期代码生成,通过wirebuild生成inject.go实现零运行时开销、编译期检查和IDE可跳转,但需手动触发且不支持动态替换依赖。
-
zip.Writer.WriteHeader会静默失败,必须检查err;Header.Name需标准化并校验;写入顺序影响解压体验;大文件需流式处理防OOM;Windows中文名需设Flags=0x800启用UTF-8。