Golang Go语言中为啥 time.Parse 返回 error,而 Time 类型的 Format 方法不返回 error 呢?
Golang Go语言中为啥 time.Parse 返回 error,而 Time 类型的 Format 方法不返回 error 呢?
这个 API 为什么设计成这样?
因为确实不会有 error,layout 参数里就是什么都可以传……
更多关于Golang Go语言中为啥 time.Parse 返回 error,而 Time 类型的 Format 方法不返回 error 呢?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
time.Parse 有 error 是因为参数只有那么几种,你多给了就会报错
Format 不会报错也是参数就那么几种,没有就忽略不处理即可
和 strconv.Itoa 没有 error 而 strconv.Atoi 有 error 一个道理吧
layout 可以自己传 layout 啊,如果 layout 不对就返回原值,问题就出在这个原值上,它应该是个 error。
时间对象的原值是? nil ?
#5 struct
解析出错就没有原值啊,原值要么 nil 要么是 1970-01-01 00:00:00,后者肯定不合适,前值就是现在返回的,只不过多返回了为啊解析出错而已
#7 返回原来的字符串
再想想好像也合理…
返回原来的字符串就破坏了返回值类型了。一个是 Time 结构,一个是 string 类型
在强类型语言里,这是不符合约定的。
只有弱类型的语言,才可以这么随心所欲
不过,真要是返回 String,在若类型语言里,也会被同事打的
“如果 layout 不对就返回原值”这句是有问题的,按照这个接口设计的含义 layout 只要是个字符串,就不可能“不对”,而且也不是返回原值,这里的 format 函数要理解为一个能够格式化时间对象的通用字符串格式化函数(想象一下 c 里面的 printf ),而不是一个把时间对象进行格式化的函数。
当然,作为 Time 的成员函数这么设计我觉得确实是有一点 confusing 的。
#11 还有就是这两组也不是互逆的,Time.Format + layout 得到的 string,喂给 time.Parse + 同一个 layout,不一定就是时间
在Go语言(Golang)中,time.Parse
函数返回 error
而 Time
类型的 Format
方法不返回 error
,这主要源于两者不同的设计目的和使用场景。
time.Parse
函数用于将字符串解析为 Time
类型。解析过程涉及多个复杂的步骤,包括匹配格式字符串、转换时间组件等。由于输入字符串的格式和内容可能多种多样,且不一定符合预期的格式,因此解析过程中可能会遇到各种问题(如格式不匹配、非法时间值等),这时就需要通过返回 error
来通知调用者解析失败,并给出失败的原因。
相比之下,Time
类型的 Format
方法则用于将 Time
值格式化为字符串。由于 Time
值本身是有效的(在创建时已经经过了验证),且格式字符串是方法参数,由调用者提供并控制,因此 Format
方法在执行时通常不会出现错误。即使提供的格式字符串有误或不符合标准库的规范,Format
方法也会尽量按照提供的格式进行格式化,可能会产生不符合预期的字符串结果,但不会因此抛出错误。
综上所述,time.Parse
返回 error
是为了处理解析过程中的不确定性,而 Time.Format
不返回 error
是因为其操作是基于有效的时间值和可控的格式字符串进行的,通常不会出现无法处理的错误情况。