这个 API 为什么设计成这样?
1
jingxyy 2019-03-05 15:16:02 +08:00
因为确实不会有 error,layout 参数里就是什么都可以传……
|
2
GTim 2019-03-05 17:41:50 +08:00
time.Parse 有 error 是因为参数只有那么几种,你多给了就会报错
Format 不会报错也是参数就那么几种,没有就忽略不处理即可 |
3
reus 2019-03-06 16:27:34 +08:00
和 strconv.Itoa 没有 error 而 strconv.Atoi 有 error 一个道理吧
|
4
sunjourney OP |
5
GTim 2019-03-06 20:28:02 +08:00
@sunjourney 时间对象的原值是? nil ?
|
6
sunjourney OP @GTim #5 struct
|
7
GTim 2019-03-06 20:48:29 +08:00
@sunjourney 解析出错就没有原值啊,原值要么 nil 要么是 1970-01-01 00:00:00,后者肯定不合适,前值就是现在返回的,只不过多返回了为啊解析出错而已
|
8
sunjourney OP @GTim #7 返回原来的字符串
|
9
sunjourney OP 再想想好像也合理...
|
10
GTim 2019-03-06 21:13:58 +08:00
@sunjourney 返回原来的字符串就破坏了返回值类型了。一个是 Time 结构,一个是 string 类型
在强类型语言里,这是不符合约定的。 只有弱类型的语言,才可以这么随心所欲 不过,真要是返回 String,在若类型语言里,也会被同事打的 |
11
jingxyy 2019-03-07 10:01:50 +08:00
@sunjourney
“如果 layout 不对就返回原值”这句是有问题的,按照这个接口设计的含义 layout 只要是个字符串,就不可能“不对”,而且也不是返回原值,这里的 format 函数要理解为一个能够格式化时间对象的通用字符串格式化函数(想象一下 c 里面的 printf ),而不是一个把时间对象进行格式化的函数。 当然,作为 Time 的成员函数这么设计我觉得确实是有一点 confusing 的。 |
12
sunjourney OP @jingxyy #11 还有就是这两组也不是互逆的,Time.Format + layout 得到的 string,喂给 time.Parse + 同一个 layout,不一定就是时间
|