Rob Pike 曾说:

如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。


看来,go的接口的设计还是一个比较突破的设计。那么他为什么这么说呢?

目前市场上大多数编程语言的接口都是侵入式的,也就是使用接口时要说明,我实现了某某接口。比如java,想要实现一个接口,就需要使用implements关键字然后加上接口名字。这样可想而知耦合度是增加了的。

其实我们要做的就是面相接口编程,但是我们到底怎么做才真正的是做到:依赖于接口而不是实现,优先使用组合而不是继承呢?

大家都知道 Duck Typing,当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。这句话是非常有哲学的,因为这句话你不知道到底是正确还是错误。假如现在有一个鸭子状的玩具摆在这里,对于一个小女孩看见可能就说这是一个鸭子。但是由于我比较喜欢吃烤鸭,当我看到这个玩具时,我只认为这就是一个玩具,不是鸭子,充其量是一个鸭子状的玩具。但是对于小女孩来说,为什么是鸭子呢?因为她看到了玩具的嘴巴扁扁的,样子和鸭子一样,所以她认为这就是鸭子。这就是因为我们关心的点不一样。

图片来源于网络

首先看一下go是如何实现一个接口的,我们使用最经典的一个例子:

package mainimport ( "fmt" "reflect" "strconv")type Stringer interface { String() string}type Binary uint64func (i Binary) String() string { return strconv.FormatUint(i.Get(), 10)}func (i Binary) Get() uint64 { return uint64(i)}func main() { b := Binary(200) s := Stringer(b) fmt.Println(s.String()) fmt.Println("s 的类型:

empty string什么错误_go语言的interface为什么好用?相关推荐

  1. go http 处理w.write 错误_Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  2. call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案

    原文链接:https://www.flysnow.org/2019/01/01/golang-error-handle-suggestion.html 微信公众号:flysnow_org(飞雪无情) ...

  3. c语言scanf返回值错误,c语言scanf返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); 如果 ...

  4. NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别

    Navicat mysql 建表字段 默认值.empty string.空白.NULL 的区别 总结在最后,没啥干货 简单测试了4种类型 bigint tinyint varchar char 单引号 ...

  5. Mysql 数据库默认值选 ‘‘“ 、Null和Empty String的区别

    Mysql 数据库默认值选 ''" .Null和Empty String的区别 1:空值('')是不占用空间的 2: MySQL中的NULL其实是占用空间的.官方文档说明: "NU ...

  6. go 变量大写_go语言如何将大写转小写,c语言字符串小写转大写

    go语言如何将大写转小写围棋怎么把大写字母变成小写字母,go语言中大写转换为小写的方法:首先,创建一个go样本文件:然后定义一个字符串类型的变量:然后使用ToLower函数将所有大写的变量字符转换成小 ...

  7. go语言视频教程_ go语言入门视频教程_go语言实战视频教程

    许多人可能知道go语言的优点在哪里,但他们不知道go语言适合在哪里使用.通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发"大型软件".学习go ...

  8. 控制台报错For input string: ““、empty String

    问题介绍:这几天做东西总是遇到两个问题:控制台报错For input string: "".empty String 背景:虽然不耽误正常使用swagger,但是看着贼烦,而且随着 ...

  9. 解决mysql的utf8编码中生僻字写入时Incorrect string value错误

    http://hi.baidu.com/cnkarl/item/e18214e8ba7ce3c6bbf37ddd ------------------------------------------- ...

  10. go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

最新文章

  1. java hanoi_Hanoi问题java解法
  2. Error in x$e : $ operator is invalid for atomic vectors
  3. python 字符串切割例题_Python字符串及练习题
  4. django 不用自带的mysql_python笔记二 django自带后台管理系统、模版渲染以及使用mysql数据库...
  5. POJ 2411 Mondriaan's Dream [经典状态压缩dp]
  6. Matplotlib绘制动态曲线图,超简单!!
  7. java怎么设置快速修复键_Java开发环境之------MyEclipse快捷键和排除错误第一选择ctrl+1(***重点***:ctrl+1,快速修复---有点像vs中的快速using...
  8. Filter(过滤器) 和 interceptor(拦截器)的区别
  9. Python笔记(十五)_异常处理
  10. Chrome 渲染流水线演化的未来
  11. 插件原理[转自CSDN]
  12. 20个令程序员泪流满面的瞬间
  13. ubuntu vmplayer安装vmtool
  14. matlab里删除文件恢复,删除的文件如何恢复?360安全卫士找回误删文件
  15. Bootstrap文字排版方面css实用类
  16. java中public static void main(String args[])具体是什么意思?
  17. syzlang语法编写案例学习 —— Looking for Remote Code Execution bugs in the Linux kernel
  18. 北京大学C语言学习第4天
  19. Spring Cloud 微服务学习与实践
  20. 单招计算机网络考什么,单招考什么内容 单招一般考什么科目

热门文章

  1. 3.PHP核心技术与最佳实践 --- PHP网络技术及应用(cURL,socket,SMTP,WebService,Cookie,Session,localStorage)
  2. 156.PHP多进程
  3. 21. yii 2 library
  4. 10. Document getElementsByTagName() 方法
  5. 2. HTML DOM Element 对象
  6. Python学习之面向对象(一)
  7. wifi的主动扫描和被动扫描
  8. 【一步一步】Spring 源码环境搭建
  9. 从现实抽象出类的步骤
  10. PHP 后台程序配置config文件,及form表单上传文件