学习了 Effective Go 中 Generality 小节的内容 https://golang.org/doc/effective_go.html#generality

由于这个小节的内容稍有点抽象,因此写了以下示例程序以便加深理解。

/* Ver1 与 Ver2 是 Version 的两种不同的具体实现。* NewShow 接受一个 Version 作为参数,并返回一个 Show。* NewShow 不管 Version 的具体实现,只要是 Version 都可以接受,*         并且不管 Show 的具体实现,本例子虽然只给出了一种 Show 的实现 (ShowVer)*         但事实上换另一种实现也是可以的。*/package mainimport "fmt"type Version interface {Is() string
}type Show interface {VerNum()
}type ShowVer struct{V string
}
func (s ShowVer) VerNum() {fmt.Println("Ver.", s.V)
}type Ver1 struct {V string
}
func (v Ver1) Is() string {return fmt.Sprint(v.V)
}type Ver2 struct{}
func (v Ver2) Is() string {return "2"
}func main() {ver1 := Ver1{"1"}ver2 := Ver2{}show1 := NewShow(ver1)show2 := NewShow(ver2)show1.VerNum()show2.VerNum()
}func NewShow(ver Version) Show {v := ver.Is()return ShowVer{v}
}

  

本程序的结果是,打印

Ver. 1

Ver. 2

转载于:https://www.cnblogs.com/ahui2017/p/6602697.html

Generality相关推荐

  1. On the Generality of Facial Forgery Detection论文原文翻译以及阅读笔记

    论文题目及原文地址:On the Generality of Facial Forgery Detection 2019IEEE第16届移动特设和传感器系统研讨会国际会议 摘要: 摘要-针对面部伪造检 ...

  2. 代码坏的味道13:夸夸其谈未来性(Speculative Generality)

    如果你的某个抽象类其实没有太大作用,请运用 Collapse Hierarch (折叠继承体系).不必要的委托可运用 Inline Class (将类内联化)除掉.如果函数的某些参数未被用上,可对它实 ...

  3. 代码的坏味道之十三 :Speculative Generality(夸夸其谈未来性)

    这个令我们十分敏感的坏味道,命名者是Brian Foote.当有人说『噢,我想我们总有一天需要做这事』并因而企图以各式各样的挂勾(hooks)和特殊情况来处理一 些非必要的事情,这种坏味道就出现了.那 ...

  4. 代码坏味道 之 13 夸夸其谈未来性 speculative generality

    <重构:改善既有代码的设计>中提到过一些代码的坏味道,针对这些坏味道,需要进行重构. 夸夸其谈未来性 speculative generality 问题1:未来可能要做某事,使用很多特殊情 ...

  5. 简单易懂读《重构》 - Speculative Generality (高估未来的可能性)

    含义: 高估未来的扩展性,添加过多不必要的类,方法或继承体系 坏处: 不利于程序维护,可读性差 目标: 依现实来重新评估,去除多余的代码部分. 实现方法: 使用Collapse Hierarchy ( ...

  6. 3.13 speculative generality (夸夸其谈未来性)

    如果所有装置都会被用到,那就值得那么做,如果用不到,就不值得.用不上的装置只会挡你的路,所以,把它搬开. 如果某个抽象类其实没有太大作用,请运用collapse hierarchy,不必要的委托可运用 ...

  7. 【死代码】(Dead Code)和【夸夸其谈未来性】(Speculative Generality)-如何解决被遗弃不用的代码以及暂时未被使用,但之后存在规划的代码?

    死代码 ●症状和特点    一个变量.参数.字段.方法或类不再被使用(通常是因为它们已经过时). ●问题产生的原因    当对软件的需求发生变化或做出更正时,没有人有时间清理旧代码.    当其中一个 ...

  8. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译

    Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译 Abstract摘要 Convolutional neural net ...

  9. C++/C++11中头文件numeric的使用

    <numeric>是C++标准程序库中的一个头文件,定义了C++ STL标准中的基础性的数值算法(均为函数模板): (1).accumulate: 以init为初值,对迭代器给出的值序列做 ...

最新文章

  1. 创建,修改Table格式
  2. linux shell expr 使用
  3. batch_normalization (bn)层以及实际使用中合并bn层
  4. huffman算法c语言实验报告,huffman二叉树实验报告--数据结构(c语言).doc
  5. (转)Spring Boot(十二):Spring Boot 如何测试打包部署
  6. cmd对应linux sleep命令,linux的sleep命令
  7. Selenium2+python自动化49-判断文本(text_to_be_present_in_element)
  8. 权限管理----用户与模块关系
  9. echarts官网折线图
  10. 终于讲透了,史上最详细的RS485自动收发电路你一定要掌握
  11. 使用OpenRefine清洗数据实例
  12. 《纳什均衡与博弈论》纳什博弈论及对自然法则的研究
  13. vmware整套实施项目文档(包含vmware安装配置,emc存储安装配置,emc光纤交换配置,...
  14. 电脑蓝牙突然无法使用,解决办法来了
  15. PhotoShop 保存 8 bit 位图(Bmp)的方法【记录备忘】
  16. 2021年中国家用咖啡研磨机市场趋势报告、技术动态创新及2027年市场预测
  17. 元岛屋日式烤肉,这个夏天你怎可错过!
  18. 解决idea maven reimport失效问题
  19. Linux系统下载vscode慢解决方法
  20. MySQL ---允许所有ip远程连接数据库

热门文章

  1. C 语言课程设计 最终答辩版 学生通讯录管理系统
  2. 2018年前端笔试高频题精选(二)
  3. 博弈论基础知识: 巴什博奕+斐波那契博弈+威佐夫博奕+尼姆博弈(及Staircase)
  4. 【渝粤题库】广东开放大学 市场调查与预测 形成性考核
  5. VUE路由防卫功能举例
  6. Zookeeper--客户端操作
  7. 理工男的网红生意, 6000万月活50万条日更的背后, 内容链还能这样操作?
  8. MATLAB算法实战应用案例精讲-【数据分析】时序异常检测(补充篇)(附Java、R语言和python代码实现)
  9. 寒假每日一题题解(1.29)摘花生(DP水题)
  10. python ipados_macOS Big Sur 正式发布并已开放下载,支持原生运行 iOS 和 iPadOS App