go中无通用parse函数,需按用途选用time.parse、strconv.parseint等;time.parse的layout须用参考时间格式;strconv.parsex必须检查err;fmt.sscanf仅适用于固定结构文本解析。

Go 里没有叫 Parse 的“通用解析函数”,你真正要用的是 time.Parse、strconv.ParseInt、fmt.Sscanf 这类具体用途的函数——名字带 Parse 的,每个只干一件事,且参数、错误处理、格式规则完全不同。
time.Parse 必须用参考时间写 layout,不能抄目标格式
你传给 time.Parse 的第一个参数不是“想输出成什么样”,而是“输入字符串长什么样”。比如解析 "2025-09-28T14:30:45Z",layout 得写 "2006-01-02T15:04:05Z",不是 "Jan 2 2006"。错用 layout 会 panic,错误信息里通常带 parsing time ... as "xxx"。
- 参考时间固定是
Mon Jan 2 15:04:05 MST 2006,其中01是月、02是日、15是 24 小时制小时、Z或-0700表示时区 - 如果输入不带时区(如
"2025-09-28 14:30:45"),layout 里也不能写Z,否则匹配失败;建议显式用time.Local或补上-0700 - 别对已有的
time.Time变量再调time.Parse——它已经是时间了,直接t.Format("...")即可
strconv.ParseX 系列必须检查 err,Atoi 只是 ParseInt 的快捷封装
strconv.Atoi("123") 等价于 strconv.ParseInt("123", 10, 0),但底层仍返回 (int, error)。忽略 err 意味着你默认输入一定合法,线上遇到 "abc" 或空字符串就会 panic 或逻辑错乱。
-
ParseInt(s, base, bitSize)的bitSize要和目标变量类型一致:存进int64就用64,存int32就用32,错配会导致截断或溢出 -
ParseBool只认"1"、"t"、"true"(大小写不敏感),"on"、"yes"会直接报错 -
ParseFloat(s, 64)解析"1.23e-4"没问题,但"1.23.45"会失败;注意科学计数法符号必须是e或E
fmt.Sscanf 适合固定结构文本,别拿它解析 JSON 或 HTML
fmt.Sscanf 是按空格/制表符分隔 + 动词匹配的轻量解析器,适用于日志行、配置片段这类人工可控格式。它不跳过多余空格,不支持嵌套,也不处理引号转义。
- 输入
"user: alice age: 25",layout 写"user: %s age: %d"才能正确提取;写成"user:%s age:%d"(去掉空格)会失败 - 动词数量、顺序、类型必须和变量地址一一对应,少一个
&或类型不匹配,运行时 panic - 它不会帮你 trim 字符串,
" alice "解出来就是带空格的" alice ",后续要自己strings.TrimSpace
最常被忽略的一点:所有 Parse 类函数都返回 error,而 Go 不强制你处理它。但生产代码里漏掉 if err != nil,等于把解析失败变成静默数据污染——比如时间解析失败却继续用零值 time.Time{} 计算,结果全是 1970 年。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











