理解golang中的function types
先找个例子来看一下:
package main import "fmt" // Greeting function types
type Greeting func(name string) string func say(g Greeting, n string) {
fmt.Println(g(n))
} func english(name string) string {
return "Hello, " + name
} func main() {
say(english, "World")
}
输出: Hello, World
say()函数要求传入一个Greeting类型,因为english函数的参数和返回值跟Greeting一样,参考接口的概念这里可以做类型转换。我们换个方式来实现上面的功能:
package main import "fmt" // Greeting function types
type Greeting func(name string) string func (g Greeting) say(n string) {
fmt.Println(g(n))
} func english(name string) string {
return "Hello, " + name
} func main() {
g := Greeting(english)
g.say("World")
}
同样输出Hello, World,只是给Greeting类型添加了say()方法。上面说了,函数类型是表示所有包含相同参数和返回类型的函数集合。我们在一开始先把func(name string) string这样的函数声明成Greeting类型,接着我们通过Greeting(english)将english函数转换成Greeting类型。通过这个转换以后,我们就可以借由变量g调用Greeting类型的say()方法。
package main import "fmt" // Greeting function types
type Greeting func(name string) string func (g Greeting) say(n string) {
fmt.Println(g(n))
} func english(name string) string {
return "Hello, " + name
} func french(name string) string {
return "Bonjour, " + name
} func main() {
g := Greeting(english)
g.say("World")
g = Greeting(french)
g.say("World")
}
输出:
Hello, World
Bonjour, World
转自:https://www.jianshu.com/p/fc4902159cf5
理解golang中的function types的更多相关文章
- 如何理解golang中的nil
nil的奇怪行为 刚接触golang时,发现nil在不同的上下文,行为表现是不同的,并且和其他语言中的表现,也不大相同 实例1:输入true, true, false,不符合传递性 func main ...
- [Go] 理解 golang 中的 nil
nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了, ...
- 深入理解javascript中的Function.prototye.bind
函数绑定(Function binding)很有可能是你在开始使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解决如何在另一个函数中保持this上下文的时候,你真正需要的其 ...
- 理解javascript中的Function.prototype.bind
在初学Javascript时,我们也许不需要担心函数绑定的问题,但是当我们需要在另一个函数中保持上下文对象this时,就会遇到相应的问题了,我见过很多人处理这种问题都是先将this赋值给一个变量(比如 ...
- 理解es6 中 arrow function的this
箭头函数相当于定义时候,普通函数.bind(this)箭头函数根本没有自己的this,导致内部的this就是定义时候的外层代码块中的this.外层代码块中的this,则取决于执行时候环境上下文cont ...
- 理解 JavaScript 中的 Function.prototype.bind
函数绑定(Function binding)很有可能是你在开始使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解决如何在另一个函数中保持this上下文的时候,你真正需要的其 ...
- 理解golang中的channel
channel是goroutine之间的通信机制.可以类比线程间的通信,线程间的通信有多种方式,比如线程上下文.共享内存.IPC通信.socket实现不同机器间的通信. channel用起来很简单,绑 ...
- 深入理解javascript中的立即执行函数(function(){…})()
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
- go---weichart个人对Golang中并发理解
个人觉得goroutine是Go并行设计的核心,goroutine是协程,但比线程占用更少.golang对并发的处理采用了协程的技术.golang的goroutine就是协程的实现. 十几个gorou ...
随机推荐
- 为什么阿里云服务器的docker启动tomcat这么慢??
https://blog.csdn.net/tianyiii/article/details/79314597 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢. ...
- 开发安全的 API 所需要核对的清单
开发安全的 API 所需要核对的清单 以下是当你在设计, 测试以及发布你的 API 的时候所需要核对的重要安全措施. 身份认证 不要使用 Basic Auth 使用标准的认证协议 (如 JWT, OA ...
- .NET Core 部署到CentOS–3.supervisord守护进
1. 安装 sudo yum install python-setuptoolssudo easy_install supervisor 2. 配置 安装成功后,输入supervisord 会显示配置 ...
- DotNetty 跨平台的网络通信库(转)
久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点,并 ...
- 基于vue2+nuxt构建的高仿饿了么(2018版)
前言 高仿饿了么,以nuxt作为vue的服务端渲染,适合刚接触或者准备上vue ssr的同学参考和学习 项目地址如遇网络不佳,请移步国内镜像加速节点 效果演示 查看demo请戳这里(请用chrome手 ...
- Django Rest Framework框架源码流程
在详细说django-rest-framework源码流程之前,先要知道什么是RESTFUL.REST API . RESTFUL是所有Web应用都应该遵守的架构设计指导原则. REST是Repres ...
- HihoCoder#1509 : 异或排序(二进制)
题意 题目链接 Sol 挺简单的吧.考虑两个元素什么时候不满足条件 设\(a_i\)与\(a_i + 1\)最高的不同位分别为0 1,显然\(S\)的这一位必须为\(0\),否则这一位必须为\(1\) ...
- 【起航计划 029】2015 起航计划 Android APIDemo的魔鬼步伐 28 App->Preferences->Default Values 偏好默认值
DefaultValues 介绍了如何在XML中定义Preference的缺省值. <CheckBoxPreference android:key="default_checkbox& ...
- check_mk raw 1.2.8p17 FAQ
Q:有没有已经实施的案例 A: http://wiki.lustre.org/Check_MK/Graphite/Graphios_Setup_Guide Q:check-mk-agent怎么安装? ...
- linux 下svn同步更新钩子
svn服务器搭建:https://www.linuxidc.com/Linux/2017-05/144254.htm SVN版本库中的一个项目:/svn/repositories/test/ 网站目录 ...