Go语言技术文章
-
Golang · Go教程 | 1个月前 | 文件处理 · Go教程 · 安全编程 · Go archive/zip 路径穿越 ZIP解压 filepath.IsLocal filepath.Localize
Go 用 archive/zip 解压外部归档时,不能直接拼接成员名。本文说明如何处理 zip.ErrInsecurePath,用 filepath.Localize 和 filepath.IsLocal 拒绝绝对路径、.. 与跨平台分隔符,并用 os.Root 限制写入目录边界。488 收藏 -
Go 1.24 为 net/http 增加 HTTP2Config 与 Protocols 配置。本文从服务端并发流限制和客户端兼容验证入手,说明 HTTP2Config 适合解决什么问题、哪些字段只对服务端生效,以及如何用最小代码确认协议协商结果。488 收藏 -
用 Go atomic.Pointer 替换进程内共享配置时,关键不是把指针换掉,而是保证读线程拿到完整快照、发布顺序清楚且失败时能回到旧版本。本文用一份可运行的配置结构说明初始化、原子发布、校验和回滚边界。488 收藏 -
Go 1.21 之后,工具链版本不只由机器上的 go 决定。用 go.mod、GOTOOLCHAIN 和 CI 矩阵配合,能把自动升级、固定版本和失败回退边界讲清楚。488 收藏 -
Go 的 POST 请求第一次失败后重试,服务端却读到空 Body,通常不是服务端丢数据,而是请求体只被消费了一次。本文用 bytes.Reader、GetBody 和两次请求日志拆开这个问题,给出可验证的重试写法与边界。488 收藏 -
结合 EXPLAIN、慢查询、DBStats 和事务边界排查 Go 服务数据库瓶颈。488 收藏 -
<p>Go中匿名函数需赋值给变量或立即执行,语法为fn:=func(xint)int{returnx*2}或func(){fmt.Println("hello")}(),支持闭包但需警惕循环中捕获迭代变量的陷阱。</p>488 收藏 -
TCP长连接不应加应用层重传,因内核已实现完整可靠传输机制;盲目重传会导致重复、错序和状态不一致,仅在协议要求“至少一次送达”且服务端幂等时才可引入。488 收藏 -
值类型传参复制数据,函数内修改不影响原值;指针类型传参传递地址,可修改原始变量。例如,int值传递不改变原值,而int通过x=100可更新原变量。结构体较大时,指针传递避免复制开销并支持字段修改,如Person结构体使用指针参数提升效率与可变性。选择依据为是否需修改原值及数据大小,注意避免指针滥用导致意外修改。488 收藏 -
使用互斥锁或通道控制并发文件读写,避免竞态条件;通过errors.Is分类处理错误,确保数据安全与程序稳定。488 收藏 -
JSON字段为null时,string类型字段解码后是零值"";需区分null与空字符串时必须用*string,解码后null→nil、""→指向空字符串的指针,取值前须判空防panic。488 收藏 -
用net/http启动投票服务需按HTTP方法拆分路由,POST/vote处理投票,GET/results返回统计;用sync.Map或SQLite持久化计票结果;注意防重复提交、内容类型校验、超时控制及日志记录。488 收藏 -
Go中optional字段生成带指针类型(如string、int32),用于区分“未设置”和“设为空值”,读取需判空后解引用,设置需取地址,清空赋nil,不支持default,JSON中null→nil、""→指向空字符串。488 收藏 -
Go1.21+是Web开发合理起点,需验证版本、GOPATH/GOBIN配置,用gomodinit初始化模块,优先原生net/http实践再选框架,搭配fresh热重载与curl/gotooltrace调试。488 收藏 -
使用os/exec包执行系统命令,通过exec.Command创建命令对象并调用Run()等待完成;2.用Output()获取命令输出;3.手动设置Stdin、Stdout、Stderr以控制输入输出流;4.设置Env字段传递环境变量;5.避免拼接用户输入防止命令注入。488 收藏