Golang duck typing(鸭子类型)的概念

喷火龙 等级 606 0 0
标签: Golang
  • “像鸭子走路,像鸭子叫(长得像鸭子),那么就是鸭子”
  • 描述事物的外部行为而非内部结构
  • 严格说go属于结构化类型系统,类似dock typing

先看一个其他语言中的duck typing :

  • python中的duck typing``` def download(retriever):

    return retriever.get("www.fabric.com")

    ```

    • 运行时才知道传入的retriever有没有get
    • 需要注释说明接口
  • c++中的duck typing

    template <class R>
    string download(const R& retriever) {
        return retriever.get("www.fabric.com");
    }
    • 编译时才知道传入的 有没有get

    • 需要注释说明接口

  • java中的类似代码

    <R extends Retriever>
    String download(R r) {
        return r.get("www.fabric.com");
    }
    • 传入的参数必须实现Retriever接口

    • 不是duck typing

  • go语言中的duck typing

    • 接口由使用者定义,谁用谁定义

      // 实现者
      package fake
      
      type Retriever struct{
          Contents string
      }
      
      func (r Retriever) Get(url string) string {
          return r.Contents
      }
      
      // 使用者
      type Retriever interface {
          Get(url string) string
      }
      
      func download(r Retriever) string {
          return r.Get("https://www.hyperledger.org/")
      }
      
      func main() {
          var r Retriever
          r = fake.Retriever{"this is a fake fabric.com"}
          fmt.Println(download(r))
          // 等价于
          // fmt.Println(download(
          //        fake.Retrivever{
          //            "this is a fake fabric.com"}))
      } 

本文转自 https://blog.csdn.net/qq_37858332/article/details/99715083,如有侵权,请联系删除。

收藏
评论区

相关推荐

godoc 命令和 golang 代码文档管理
介绍 godoc 是 golang 自带的文档查看器,更多的提供部署服务 go doc 和 godoc 在 golang 1.13 被移除了,可以自行安装 golang.org go1.13 godoc(https://links.jianshu.com/go?tohttps%3A%2F%2Fgolang.org%2Fdoc%2Fg
Mac安装Golang和vscode
Mac第一次安装golang和vscode一起使用,遇到了不少的坑,下面介绍一下正确的安装方式。 1、使用brew安装Golang 如果不知道brew是什么,或怎么安装请看这里 brew官网(https://brew.sh/index_zhcn) brew install golang 安装完成后可以使用
golang 分析调试高阶技巧
layout: post title: “golang 调试高阶技巧” date: 2020603 1:44:09 0800 categories: golang GC 垃圾回收 golang 高阶调试 Golang tools nm compile
Golang duck typing(鸭子类型)的概念
“像鸭子走路,像鸭子叫(长得像鸭子),那么就是鸭子” 描述事物的外部行为而非内部结构 严格说go属于结构化类型系统,类似dock typing 先看一个其他语言中的duck typing : python中的duck typing def download(retriever): return retriever
Go语言入门系列(一)之Go的安装和使用
1.安装环境 ====== 1. 进入[Golang官网](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgolang.org),进入下载页面。 (如果打不开可访问[Golang中国](https://www.oschina.net/action/GoToLink?u
Archlinux下Visual Studio Code配置Golang开发环境
一、Golang的安装 ----------- GoLang安装并验证一下: [cox@localhost ~]$ sudo pacman -S go [cox@localhost ~]$ go version go version go1.8.3 linux/amd64s 要注意,Golang的安装要确保两个环境变量,一个是G
Golang Gin实践 番外 请入门 Makefile
<h1>Golang Gin实践 番外 请入门 Makefile</h1> <p>原文地址:<a href="https://github.com/EDDYCJY/blog/blob/master/golang/gin/2018-08-26-Gin%E5%AE%9E%E8%B7%B5-%E7%95%AA%E5%A4%96-%E8%AF%B7%E5%85%A5
Golang In PingCAP
随着 Golang 在后端领域越来越流行,有越来越多的公司选择 Golang 作为主力开发语言。本次 GopherChina Beijing 2016 大会上,看到 Golang 在各家公司从人工智能到自动运维,从 Web 应用到基础架构都发挥着越来越多的作用。可以说 Golang 在这几年间,获得了长足的进步。 PingCAP 是一家由几名 Go
Golang 内存管理源码剖析
Golang 的内存管理基于 tcmalloc,可以说起点挺高的。但是 Golang 在实现的时候还做了很多优化,我们下面通过源码来看一下 Golang 的内存管理实现。下面的源码分析基于 go1.8rc3。 1.tcmalloc 介绍 ------------- 关于 tcmalloc 可以参考这篇文章 [tcmalloc 介绍](https://ww
Golang 开发环境搭建
Golang 是 Google 发布的开发语言,Go 编译的程序速度可以媲美 C/C++。 安装 -- sudo apt-get install golang sudo apt-get install golang-go.tools 使用 -- * 编译运行程序 go run main.go * 查看命令文
Golang 文章正文抽取(readability)
readability for golang Golang版本是根据[readabiliity for node.js](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fluin%2Freadability)以及[readability for python](h
Golang依赖管理工具:glide从入门到精通使用
介绍 -- 不论是开发Java还是你正在学习的Golang,都会遇到**依赖管理**问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍[gilde](https://www.oschina.net/action/GoToLink?url=https%3
Python抽象基类中__subclasshook__方法的使用并实现自己的虚拟子类
Python的鸭子特性(duck typing) ------------------------ Python中自定义的类只要实现了某种特殊的协议,就能赋予那种行为,举一个简单的例子: class A: def __len__(self): return 0 a = A() print(len(a
Selenium+Python自动化测试学习问题总结笔记
1.问题描述:不能导入自定义类 错误内容:This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of case
Sentinel
![9.28头图.png](https://ucc.alicdn.com/pic/developer-ecology/af7ab6c27c3c4c3aa5dc2cce3c9e8ab9.png) > \*\*导读:\*\*2020年,Sentinel 推出 Go 原生版本[Sentinel-Golang](https://www.oschina.net/ac