strconv.Parse{Float,Int,Uint}
在实现其他语法(如 JSON)时经常被使用,这些语法可能是 strconv.ParseX
目前所做的事情的子集或超集。然而,strconv.Parse
今天所做的事情并没有得到很好的规定。到底接受的输入语法是什么?
例如,ParseFloat
的文档只说“如果 s 是格式良好的”,但没有具体说明“格式良好”是什么意思。我怀疑答案是输入是否符合 Go 规范中的语法。如果是这样的话,这需要被记录下来。
此外,这也引发了一个问题,即输入语法是否稳定。显然,这不是这样,因为 strconv.ParseX
最近被增强以支持新的数字字面量语法(CL/160241 和 CL/160244)。这个改变将悄悄地破坏许多假设输入 ParseX
受到 Go1.13 之前的语法约束的用例。如果是这样的话,输入语法的不稳定性也应该被记录下来。
(顺便说一下,我认为语义上的改变完全合理,我支持它;但是我看到很多代码因为这个改变而默默地失效。更好地记录这一点将有助于防止未来的滥用。)
\cc @cybrcodr, @griesemer, @rsc
5条答案
按热度按时间6jygbczu1#
@andybons,我有点困惑。为什么这个被标记为提案?
显然,各自的strconv例程的接受语法必须进行调整。
strconv
遵循Go规范这一点对我来说并不明显。Google内部对这个函数的误用似乎表明用户对此也并不明显。更灵活的语法(下划线)只有在基本参数设置为0时才允许。
这种行为令人惊讶,更显示了这些函数周围的文档不足。
nwlls2ji2#
@dsnet 我之前表述得不够准确:如果整数解析程序指定了一个非零的基数,它们不会遵循语言规范(因为语言规范不允许,例如,不带
0x
前缀的十六进制字面量)。它们也没有改变。改变的是基数为0的整数解析程序和浮点解析程序。无论如何,这不应该是一个提议(我已经修复了这个问题)。这只是一个文档问题。
epfja78i3#
https://golang.org/cl/191078提到了这个问题:
strconv: document _ grouping in digits for Parse(Float, *Int)
jw5wzhpr4#
https://golang.org/cl/191168提到了这个问题:
[release-branch.go1.13] strconv: update documentation
ax6ht2ek5#
建议的Go 1.13数字字面量更改是语言更改,显然,各自strconv例程的接受语法必须进行调整。尽管对于整数解析函数,只有在将
base
参数设置为0时,才允许使用更灵活的语法(下划线)。在这里,形式良好意味着它遵循了Go语言规范中的这些字面量。