第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【Go語(yǔ)言干貨】從入門說(shuō)起,你不得不要知道的面向接口,函數(shù)式編程,錯(cuò)誤處理

面向接口

duck typing

  • 描述事物的外部行为而非内部结构
  • 严格说go(编译绑定)属于结构化类型系统,类似duck typing(动态绑定)
  • 接口由使用者定义
  • 接口的实现是隐式的
#python
#运行时才知道传入的retriever有没有get
#需要注释来说明接口
def download(retriever):
	return retriever.get("idcbgp.cn")
// c++
//编译时才知道传入的retriever有没有get
//需要注释来说明接口
template <class R>
string download(const R& retriever){
	return retriever.get("idcbgp.cn");
}
// java没有duck typing
//传入的参数必须实现Retriever接口,无法实现同时需要多个接口 (apache polygene解决,但是很难用)
//不是duck typing
<R extends Retriever>
String download(R r){
	return r.get("idcbgp.cn");
}
//同时具有python,c++的duck typing的灵活性
// 又具有java的类型检查
<R extends Retriever>
String download(R r){
	return r.get("idcbgp.cn");
}

图片描述

  • 接口变量自带指针
  • 接口变量同样采用值传递,几乎不需要使用接口的指针
  • 指针接收者实现只能以指针方式使用;值接收者都可以
  • 表示任何类型:interface
  • 错误处理 Type Assertion
  • Type Switch
  • 常用接口
    • Stringer
    • Reader
    • Writer

函数式编程

函数与闭包

  • 函数式编程
    • 函数是一等公民:参数,变量,返回值都可以是函数
    • 高阶函数
    • 函数>闭包
    • 纯函数
      • 不能有状态,只有常量和函数
      • 函数只能有一个参数
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))
	}	
}

# python原生支持闭包
# 使用__closure__来查看闭包的内容
def addr():
	sum = 0
	
	def f(value):
		nonlocal sum
		sum += value
		return num
	return f
过去:stl或者boost带有类似库
c++11及以后:支持闭包
auto adder(){
	auto sum=0return [=] (int value) mutable {
		sum+=value;
		return sum;
}
//1.8以后:使用Function接口和Lambda表达式来创建函数对象
//匿名类或Lambda表达式均支持闭包
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
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
PHP開(kāi)發(fā)工程師
手記
粉絲
1.6萬(wàn)
獲贊與收藏
1811

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消