The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
iyear

关于 accept interfaces, return structs

  •  
  •   iyear ·
    iyear · Nov 19, 2021 · 2303 views
    This topic created in 1810 days ago, the information mentioned may be changed or developed.

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

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

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

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