V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
sunjourney
V2EX  ›  Go 编程语言

为啥 time.Parse 返回 error, func (t Time) Format(layout string) string 不返回 error 呢?

  •  
  •   sunjourney · 2019-03-05 15:01:34 +08:00 · 1804 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个 API 为什么设计成这样?

    12 条回复    2019-03-07 17:49:27 +08:00
    jingxyy
        1
    jingxyy  
       2019-03-05 15:16:02 +08:00
    因为确实不会有 error,layout 参数里就是什么都可以传……
    GTim
        2
    GTim  
       2019-03-05 17:41:50 +08:00
    time.Parse 有 error 是因为参数只有那么几种,你多给了就会报错

    Format 不会报错也是参数就那么几种,没有就忽略不处理即可
    reus
        3
    reus  
       2019-03-06 16:27:34 +08:00
    和 strconv.Itoa 没有 error 而 strconv.Atoi 有 error 一个道理吧
    sunjourney
        4
    sunjourney  
    OP
       2019-03-06 20:22:11 +08:00
    @jingxyy @GTim layout 可以自己传 layout 啊,如果 layout 不对就返回原值,问题就出在这个原值上,它应该是个 error。
    GTim
        5
    GTim  
       2019-03-06 20:28:02 +08:00
    @sunjourney 时间对象的原值是? nil ?
    sunjourney
        6
    sunjourney  
    OP
       2019-03-06 20:34:30 +08:00
    @GTim #5 struct
    GTim
        7
    GTim  
       2019-03-06 20:48:29 +08:00
    @sunjourney 解析出错就没有原值啊,原值要么 nil 要么是 1970-01-01 00:00:00,后者肯定不合适,前值就是现在返回的,只不过多返回了为啊解析出错而已
    sunjourney
        8
    sunjourney  
    OP
       2019-03-06 20:54:38 +08:00
    @GTim #7 返回原来的字符串
    sunjourney
        9
    sunjourney  
    OP
       2019-03-06 20:59:24 +08:00
    再想想好像也合理...
    GTim
        10
    GTim  
       2019-03-06 21:13:58 +08:00
    @sunjourney 返回原来的字符串就破坏了返回值类型了。一个是 Time 结构,一个是 string 类型

    在强类型语言里,这是不符合约定的。

    只有弱类型的语言,才可以这么随心所欲

    不过,真要是返回 String,在若类型语言里,也会被同事打的
    jingxyy
        11
    jingxyy  
       2019-03-07 10:01:50 +08:00
    @sunjourney
    “如果 layout 不对就返回原值”这句是有问题的,按照这个接口设计的含义 layout 只要是个字符串,就不可能“不对”,而且也不是返回原值,这里的 format 函数要理解为一个能够格式化时间对象的通用字符串格式化函数(想象一下 c 里面的 printf ),而不是一个把时间对象进行格式化的函数。
    当然,作为 Time 的成员函数这么设计我觉得确实是有一点 confusing 的。
    sunjourney
        12
    sunjourney  
    OP
       2019-03-07 17:49:27 +08:00
    @jingxyy #11 还有就是这两组也不是互逆的,Time.Format + layout 得到的 string,喂给 time.Parse + 同一个 layout,不一定就是时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   933 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:39 · PVG 05:39 · LAX 14:39 · JFK 17:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.