Go问答技术文章
-
Go 的 sync.Mutex 可以使用零值,但首次使用后不能再复制。本文说明按值传参、range、返回值为什么会复制锁,并给出指针接收者、快照类型和 go vet 检查方案。233 收藏 -
Go sync.Pool 里的对象会消失,是因为它只承诺临时对象复用,不承诺持久保存:池中元素可被运行时自动移除,Get 也可能直接把池当作空池。本文用 New、Get、Put 示例说明正确用法,并划清 sync.Pool 与业务缓存的边界。109 收藏 -
Go 的 bytes.Buffer.Bytes 返回的是共享底层存储的未读区域切片。本文区分 Read、Write、Reset、Truncate 带来的视图失效与真实覆盖,并给出安全复制方案。462 收藏 -
Go 的 Header.Get 返回空字符串时,先检查是否用 Header.Set 或 Header.Add 写入、是否把请求头和响应头对象混用了,以及是否直接向 map 写入了非规范化键。118 收藏 -
Go 使用 filepath.Ext 判断文件扩展名时,只会返回最终路径元素最后一个点开始的后缀。本文结合隐藏文件、多重后缀和大小写,给出可复用的判断规则。474 收藏 -
Go 使用 os.OpenFile 创建文件时,传入的 perm 不是最终权限。本文拆解 umask、文件是否已存在以及 Chmod 的关系,并给出一套可复用的排查与修正写法。486 收藏 -
Go 的 PathEscape 用于 URL 路径段,QueryEscape 用于查询参数值。两者对斜杠、加号和与号的处理不同,混用会导致路径层级变化或查询参数串位。本文用最小示例和 url.Values 说明选择方法。192 收藏 -
Golang · Go问答 | 1个月前 | go · 重定向 · Microsoft Visual Studio cnwizards(c++程序开发包) Go HTTP重定向 post http.Client
Go http.Client 遇到 301、302、303 时会把后续 POST 改为 GET;本文解释状态码差异、GetBody 和 CheckRedirect 的用法,帮助你避免请求体悄悄丢失。133 收藏 -
Go 的 database/sql 不会统一改写占位符,? 还是 $1 取决于数据库驱动和后端语法。本文用 MySQL 与 PostgreSQL 对照示例,说明参数值、表名列名和跨数据库适配的边界。149 收藏 -
Go 的 rows.Next 返回 false 不一定代表结果集正常读完,也可能是迭代期间发生了错误。本文用最小可用代码拆开 QueryContext、Scan、Err 和 Close 的判断边界,说明如何避免把超时、驱动错误误判为空结果。433 收藏 -
普通 []byte(s) 转换得到可写字节切片,修改它不会回写原 string;中文按字符修改应使用 []rune,结果再按需转回 string。307 收藏 -
Go 的 FormatFloat 和 printf 只能控制浮点数的显示格式,不能把二进制 float64 变成精确十进制。本文用 0.1+0.2 说明误差来源,并比较展示格式、整数最小单位和高精度十进制三种处理方式。263 收藏 -
Go 超时配置写成整数时,time.Duration 会按纳秒解释,1 并不是 1 秒。本文解释单位原因,给出固定值、整数配置和带单位字符串的正确写法,并整理超时排查清单。354 收藏 -
Go 两个 time.Time 显示相同但用 == 比较不相等,通常是 Location 或 monotonic clock 不同。本文通过原创示例解释 Equal 与 == 的边界,并给出 map 键、数据库精度和业务日期的正确写法。382 收藏 -
讲清 Go 的 json.Marshal 对 map 键的支持边界:字符串、整数和 encoding.TextMarshaler,以及结构体、浮点数等键的替代方案。317 收藏