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

关于 accept interfaces, return structs

  •  
  •   iyear ·
    iyear · 2021-11-19 09:33:07 +08:00 · 1318 次点击
    这是一个创建于 1137 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这句话出自 https://en.m.wikipedia.org/wiki/Robustness_principle

    但是标准库也经常是返回 interface ,最简单就是 error,底层对上层屏蔽自己的实现细节,这不是很自然么

    这句话我看很多文章都是在拿工厂模式说事,是不是只针对部分场景,如果上层只是想要一组通用的行为,底层返回 interface 没啥问题吧

    6 条回复    2021-11-19 13:37:07 +08:00
    mcfog
        1
    mcfog  
       2021-11-19 09:57:05 +08:00 via Android   ❤️ 1
    https://github.com/go-proverbs/go-proverbs.github.io/issues/37
    rob pike 并不 100%赞同这句话并拒绝将其加入 golang proverbs
    2i2Re2PLMaDnghL
        2
    2i2Re2PLMaDnghL  
       2021-11-19 10:27:45 +08:00
    1. 我没发现你这个链接里有标题里这段话,如是来源具体历史版本,请提供;
    2. Robustness principle 实质上导致了世纪初的 Web 生态大混乱:因为不是所有人都严格遵守之,而兼容性测试并未进行广泛配合;
    3. 我认为最优兼容性实践是在所有未定义行为上人为施加随机性,依据是耗散结构理论。
    Nitroethane
        3
    Nitroethane  
       2021-11-19 10:56:51 +08:00 via iPhone
    最近在看 docker 源码,这种设计挺普遍的,方法的返回值类型是 interface ,实际 return 的是实现了 interface 的结构体实例。我觉着这种思路挺好啊,对外部屏蔽内部的实现细节
    iyear
        4
    iyear  
    OP
       2021-11-19 11:01:28 +08:00 via Android
    @2i2Re2PLMaDnghL be conservative in what you do, be liberal in what you accept from others 算是这句话的口语化流传版本吧
    JohnSmith
        5
    JohnSmith  
       2021-11-19 13:03:02 +08:00
    过早抽象不好
    mason961125
        6
    mason961125  
       2021-11-19 13:37:07 +08:00
    emmm 其实我想问一下,不返回接口的话你们都是怎么 mock 的...?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:33 · PVG 04:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.