侠客岛的含笑
2019-02-02 16:57:03浏览 15158
面向接口
duck typing
- 描述事物的外部行为而非内部结构
- 严格说go(编译绑定)属于结构化类型系统,类似duck typing(动态绑定)
- 接口由使用者定义
- 接口的实现是隐式的
def download(retriever):
return retriever.get("www.imooc.com")
template <class R>
string download(const R& retriever){
return retriever.get("www.imooc.com");
}
<R extends Retriever>
String download(R r){
return r.get("www.imooc.com");
}
<R extends Retriever>
String download(R r){
return r.get("www.imooc.com");
}
- 接口变量自带指针
- 接口变量同样采用值传递,几乎不需要使用接口的指针
- 指针接收者实现只能以指针方式使用;值接收者都可以
- 表示任何类型:interface
- 错误处理 Type Assertion
- Type Switch
- 常用接口
函数式编程
函数与闭包
- 函数式编程
- 函数是一等公民:参数,变量,返回值都可以是函数
- 高阶函数
- 函数>闭包
- 纯函数
func adder()func(value int)int {
sum :=0
return func(value int)int{
sum+=value
return sum
}
}
func main(){
adder:=adder()
for i :=0;i<10;i++{
fmt.Println(adder(i))
}
}
def addr():
sum = 0
def f(value):
nonlocal sum
sum += value
return num
return f
过去:stl或者boost带有类似库
c++11及以后:支持闭包
auto adder(){
auto sum=0;
return [=] (int value) mutable {
sum+=value;
return sum;
};
Function<Integer,Integer> adder(){
final Holder<Integer> sum=new Holder<>(0)
return(Integer value)->{
sum.value +=value;
return sum.value;
};
}
斐波那契
func Fibonacci() func() int {
a, b := 0, 1
return func() int {
a, b = b, a+b
return a
}
}
资源管理
defer调用
- 确保调用在函数结束时发生
- 参数在defer语句时计算
- defer列表为后进先出。栈
panic
- 停止当前函数执行
- 一直向上返回,执行每一层的defer
- 如果没有遇见recover,程序退出
- 意料之中的:使用error。如:文件打不开
- 意料之外的:使用panic。如:数组越界
recover
- 仅在defer调用中使用
- 获取panic的值
- 如果无法处理,可重新panic
热门评论
谁说Java不能同时实现多个接口?