Go语言技术文章
-
调用 context.WithCancel 后,goroutine 仍然不退出,通常不是 cancel 失效,而是工作循环没有监听 Done 或被阻塞在不可取消的操作上。本文用最小代码复现问题,再通过 pprof、日志和退出计数定位原因,给出可回归的修复方式。334 收藏 -
用 Go 标准库 http.ServeContent 做一个可断点续传的文件接口,串起 Range、206 Partial Content、Last-Modified 和 If-Modified-Since,并补上路径、时间和回归检查。469 收藏 -
Go 服务接入多模态接口时,图片预检应放在上传入口:先检查 MIME、文件头和字节上限,再决定是否送给模型;遇到格式不支持或服务超时则返回可解释的降级结果。202 收藏 -
用 Go 的 embed.FS 把 Markdown 和静态资源打进单个二进制,再通过 net/http 提供本地预览,覆盖目录组织、路径处理、缓存和构建验收。153 收藏 -
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏 -
Golang · Go问答 | 1个月前 | golang · 并发编程 · bytes.Buffer · 内存管理 · Go问答 · bytes reset bytes.Buffer Go内存 切片别名
Go 里把 bytes.Buffer.Bytes() 返回的切片保存下来,再复用 Buffer 写下一条消息,旧数据为什么会跟着变化?关键在于 Bytes 返回的是底层数组视图,不是独立副本。本文用消息编码场景说明 Reset、切片别名、Clone 拷贝和并发边界,给出可复查的安全写法。470 收藏 -
asyncio.gather 遇到子任务异常时,默认只把第一个异常交给调用方,其他任务可能仍在运行。本文用可复现实验说明 return_exceptions、Task.cancel 和 finally 清理之间的边界。210 收藏 -
Python 服务在并发升高后,日志格式化和磁盘写入容易挤占请求线程。本文用 QueueHandler 与 QueueListener 拆开日志生产和落盘,比较直接写文件、队列日志两种方案,给出可运行示例、压测口径与优雅退出处理。268 收藏 -
Golang · Go问答 | 1个月前 | go · 文件上传 · 安全 · net/http · 接口设计 · multipart/form-data ParseMultipartForm http.MaxBytesReader Go文件上传 请求体大小限制
Go 文件上传接口不能只依赖 ParseMultipartForm 的参数,否则超大请求仍可能先进入内存或临时文件。本文从 net/http 服务端入口开始,演示 MaxBytesReader、ParseMultipartForm 和文件级校验的组合边界,并给出超限回归检查。275 收藏 -
Golang · Go问答 | 1个月前 | go · 性能 · bufio · 日志处理 · 错误排查 · 分块读取 Go bufio.Scanner token too long Scanner.Buffer 大日志行
Go 用 bufio.Scanner 逐行读取日志时,遇到超长 JSON 行会返回 token too long。本文用可复现实验比较默认上限、Scanner.Buffer 和 bufio.Reader 分块读取的内存与吞吐边界,给出线上日志处理的选择方法。501 收藏 -
Golang · Go教程 | 1个月前 | go · 性能 · net/http · HTTP缓存 · Go ETag If-None-Match 304缓存 http.ResponseWriter
Go 服务返回静态 JSON 或文章详情时,ETag 可以让浏览器先带 If-None-Match 询问资源是否变化,未变化就返回 304,减少响应体传输。本文用 net/http 写一个可运行的缓存协商示例,说明哈希生成、条件判断、响应头顺序和测试边界。395 收藏 -
Go 服务需要在不重启进程的情况下临时关闭一条新逻辑时,atomic.Bool 可以提供轻量的并发开关。本文用运行时功能开关示例说明 Load、Store、启动默认值、灰度比例和回滚检查该怎么组织,避免数据竞争与状态不一致。270 收藏 -
科技周边 · 人工智能 | 1个月前 | API · go · 人工智能 · 工程实践 · 工具调用 · Go Anthropic Messages API tool_use tool_result Claude工具调用
Go 服务接入 Anthropic Messages API 的工具调用时,模型返回 tool_use 只是请求执行工具,不是最终答案。本文用天气查询工具拆解 stop_reason、tool_use_id、tool_result 的往返消息格式,并给出防止无限循环和错误回传的实现边界。368 收藏 -
Go HTTP 中间件看起来只是函数嵌套,但鉴权、限流、日志和业务处理的顺序会直接影响安全性、指标口径与资源消耗。本文用一条订单接口链路说明中间件的组合方式、顺序取舍和可验证边界。382 收藏 -
Go 1.23 为 for range 增加了函数迭代器。本文从旧版自定义遍历写法迁移到 iter.Seq,说明 yield 返回值、提前停止、iter.Pull 和 go.mod 版本边界,并给出可运行的检查代码。148 收藏