我有一个Go程序,它接受并使用用户在运行时提供的格式字符串。这些的规范类似于"格式字符串,它接受三个整数"等。
如果用户给我一个不符合我的规格的字符串,我想返回/输出错误。我不相信使用fmt
库有一种简单的方法:这是正确的吗?我该怎么做?
我可以想到三种可能的方法,但我遇到了所有问题:
调用fmt.Sprintf(inputFmt, args...)
并搜索格式化程序遇到问题时生成的"!%"
子字符串。如果用户实际上想要一个在其中某处有"!%"
的字符串,那么这不起作用。我认为这对我的申请来说可能性很小,但如果我没有必要的话,我真的不想做出这个限制。
编写在格式化之前检查输入字符串的代码,以查看它是否符合我的规范。对于上面的例子,我检查是否确实有三个有效的整数动词(完成检查那些动词可以采用的所有标志)。查看doPrintf()
中的fmt/print.go
,这似乎有很多工作要做。
不要显式检查格式是否成功,但稍后在格式错误的字符串未成功使用时报告错误。 (例如the file %!s(int=1).dat%!(EXTRA int=2, int=3) does not exist or is misformatted
)。我认为这种类型的错误消息可能会让使用我的程序的非Go程序员感到困惑,并且在所有需要格式字符串的情况下也不会起作用。