成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語(yǔ)言只公開接口,go 接口作用

為什么我不喜歡go語(yǔ)言式的接口

所謂Go語(yǔ)言式的接口,就是不用顯示聲明類型T實(shí)現(xiàn)了接口I,只要類型T的公開方法完全滿足接口I的要求,就可以把類型T的對(duì)象用在需要接口I的地方。這種做法的學(xué)名叫做Structural Typing,有人也把它看作是一種靜態(tài)的Duck Typing。除了Go的接口以外,類似的東西也有比如Scala里的Traits等等。有人覺(jué)得這個(gè)特性很好,但我個(gè)人并不喜歡這種做法,所以在這里談?wù)勊娜秉c(diǎn)。當(dāng)然這跟動(dòng)態(tài)語(yǔ)言靜態(tài)語(yǔ)言的討論類似,不能簡(jiǎn)單粗暴的下一個(gè)“好”或“不好”的結(jié)論。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到桐城網(wǎng)站設(shè)計(jì)與桐城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋桐城地區(qū)。

我的觀點(diǎn):

Go的隱式接口Duck Typing確實(shí)不是新技術(shù), 但是在主流靜態(tài)編程語(yǔ)言中支持Duck Typing應(yīng)該是很少的(不清楚目前是否只有Go語(yǔ)言支持).

靜態(tài)類型和動(dòng)態(tài)類型雖然沒(méi)有絕對(duì)的好和不好, 但是每個(gè)都是有自己的優(yōu)勢(shì)的, 沒(méi)有哪一個(gè)可以包辦一切. 而Go是試圖結(jié)合靜態(tài)類型和動(dòng)態(tài)類型(interface)各自的優(yōu)勢(shì).

那么就從頭談起:什么是接口。其實(shí)通俗的講,接口就是一個(gè)協(xié)議,規(guī)定了一組成員,例如.NET里的ICollection接口:

public interface ICollection {

int Count { get; }

object SyncRoot { get; }

bool IsSynchronized { get; }

void CopyTo(Array array, int index);

}

這就是一個(gè)協(xié)議的全部了嗎?事實(shí)并非如此,其實(shí)接口還規(guī)定了每個(gè)行為的“特征”。打個(gè)比方,這個(gè)接口的Count除了需要返回集合內(nèi)元素的數(shù)目以外,還隱含了它需要在O(1)時(shí)間內(nèi)返回這個(gè)要求。這樣一個(gè)使用了ICollection接口的方法才能放心地使用Count屬性來(lái)獲取集合大小,才能在知道這些特征的情況下選用正確的算法來(lái)編寫程序,而不用擔(dān)心帶來(lái)性能問(wèn)題,這才能實(shí)現(xiàn)所謂的“面向接口編程”。當(dāng)然這種“特征”并不但指“性能”上的,例如Count還包含了例如“不修改集合內(nèi)容”這種看似十分自然的隱藏要求,這都是ICollection協(xié)議的一部分。

為什么要使用 Go 語(yǔ)言?Go 語(yǔ)言的優(yōu)勢(shì)在哪里

1、學(xué)習(xí)曲線

它包含了類C語(yǔ)法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語(yǔ)言容易學(xué)習(xí),所以一個(gè)普通的大學(xué)生花一個(gè)星期就能寫出來(lái)可以上手的、高性能的應(yīng)用。在國(guó)內(nèi)大家都追求快,這也是為什么國(guó)內(nèi)Go流行的原因之一。

2、效率

Go擁有接近C的運(yùn)行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。

3、出身名門、血統(tǒng)純正

之所以說(shuō)Go語(yǔ)言出身名門,是因?yàn)槲覀冎繥o語(yǔ)言出自Google公司,這個(gè)公司在業(yè)界的知名度和實(shí)力自然不用多說(shuō)。Google公司聚集了一批牛人,在各種編程語(yǔ)言稱雄爭(zhēng)霸的局面下推出新的編程語(yǔ)言,自然有它的戰(zhàn)略考慮。而且從Go語(yǔ)言的發(fā)展態(tài)勢(shì)來(lái)看,Google對(duì)它這個(gè)新的寵兒還是很看重的,Go自然有一個(gè)良好的發(fā)展前途。我們看看Go語(yǔ)言的主要?jiǎng)?chuàng)造者,血統(tǒng)純正這點(diǎn)就可見(jiàn)端倪了。

4、組合的思想、無(wú)侵入式的接口

Go語(yǔ)言可以說(shuō)是開發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語(yǔ)言支持當(dāng)前所有的編程范式,包括過(guò)程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。

5、強(qiáng)大的標(biāo)準(zhǔn)庫(kù)

這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫(kù)基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個(gè),網(wǎng)絡(luò)層、系統(tǒng)層的庫(kù)非常實(shí)用。

6、部署方便

我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖?,所以現(xiàn)在也有很多人用Go開發(fā)運(yùn)維程序。

7、簡(jiǎn)單的并發(fā)

它包含降低心智的并發(fā)和簡(jiǎn)易的數(shù)據(jù)同步,我覺(jué)得這是Go最大的特色。之所以寫正確的并發(fā)、容錯(cuò)和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e(cuò)誤的工具和錯(cuò)誤的抽象,Go可以說(shuō)這一塊做的相當(dāng)簡(jiǎn)單。

8、穩(wěn)定性

Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會(huì)更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期的各個(gè)環(huán)節(jié)的工具,如go

tool、gofmt、go test。

go語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的簡(jiǎn)單網(wǎng)關(guān)

網(wǎng)關(guān)=反向代理+負(fù)載均衡+各種策略,技術(shù)實(shí)現(xiàn)也有多種多樣,有基于 nginx 使用 lua 的實(shí)現(xiàn),比如 openresty、kong;也有基于 zuul 的通用網(wǎng)關(guān);還有就是 golang 的網(wǎng)關(guān),比如 tyk。

這篇文章主要是講如何基于 golang 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)關(guān)。

轉(zhuǎn)自: troy.wang/docs/golang/posts/golang-gateway/

整理:go語(yǔ)言鐘文文檔:

啟動(dòng)兩個(gè)后端 web 服務(wù)(代碼)

這里使用命令行工具進(jìn)行測(cè)試

具體代碼

直接使用基礎(chǔ)庫(kù) httputil 提供的NewSingleHostReverseProxy即可,返回的reverseProxy對(duì)象實(shí)現(xiàn)了serveHttp方法,因此可以直接作為 handler。

具體代碼

director中定義回調(diào)函數(shù),入?yún)?http.Request,決定如何構(gòu)造向后端的請(qǐng)求,比如 host 是否向后傳遞,是否進(jìn)行 url 重寫,對(duì)于 header 的處理,后端 target 的選擇等,都可以在這里完成。

director在這里具體做了:

modifyResponse中定義回調(diào)函數(shù),入?yún)?http.Response,用于修改響應(yīng)的信息,比如響應(yīng)的 Body,響應(yīng)的 Header 等信息。

最終依舊是返回一個(gè)ReverseProxy,然后將這個(gè)對(duì)象作為 handler 傳入即可。

參考 2.2 中的NewSingleHostReverseProxy,只需要實(shí)現(xiàn)一個(gè)類似的、支持多 targets 的方法即可,具體實(shí)現(xiàn)見(jiàn)后面。

作為一個(gè)網(wǎng)關(guān)服務(wù),在上面 2.3 的基礎(chǔ)上,需要支持必要的負(fù)載均衡策略,比如:

隨便 random 一個(gè)整數(shù)作為索引,然后取對(duì)應(yīng)的地址即可,實(shí)現(xiàn)比較簡(jiǎn)單。

具體代碼

使用curIndex進(jìn)行累加計(jì)數(shù),一旦超過(guò) rss 數(shù)組的長(zhǎng)度,則重置。

具體代碼

輪詢帶權(quán)重,如果使用計(jì)數(shù)遞減的方式,如果權(quán)重是5,1,1那么后端 rs 依次為a,a,a,a,a,b,c,a,a,a,a…,其中 a 后端會(huì)瞬間壓力過(guò)大;參考 nginx 內(nèi)部的加權(quán)輪詢,或者應(yīng)該稱之為平滑加權(quán)輪詢,思路是:

后端真實(shí)節(jié)點(diǎn)包含三個(gè)權(quán)重:

操作步驟:

具體代碼

一致性 hash 算法,主要是用于分布式 cache 熱點(diǎn)/命中問(wèn)題;這里用于基于某 key 的 hash 值,路由到固定后端,但是只能是基本滿足流量綁定,一旦后端目標(biāo)節(jié)點(diǎn)故障,會(huì)自動(dòng)平移到環(huán)上最近的那么個(gè)節(jié)點(diǎn)。

實(shí)現(xiàn):

具體代碼

每一種不同的負(fù)載均衡算法,只需要實(shí)現(xiàn)添加以及獲取的接口即可。

然后使用工廠方法,根據(jù)傳入的參數(shù),決定使用哪種負(fù)載均衡策略。

具體代碼

作為網(wǎng)關(guān),中間件必不可少,這類包括請(qǐng)求響應(yīng)的模式,一般稱作洋蔥模式,每一層都是中間件,一層層進(jìn)去,然后一層層出來(lái)。

中間件的實(shí)現(xiàn)一般有兩種,一種是使用數(shù)組,然后配合 index 計(jì)數(shù);一種是鏈?zhǔn)秸{(diào)用。

具體代碼

標(biāo)題名稱:go語(yǔ)言只公開接口,go 接口作用
鏈接地址:http://jinyejixie.com/article14/dssdege.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站收錄、做網(wǎng)站靜態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
芜湖市| 集安市| 光山县| 平阳县| 郴州市| 扶风县| 博罗县| 遵义县| 博罗县| 海林市| 石家庄市| 通海县| 鹤庆县| 平阳县| 三都| 若尔盖县| 东乌珠穆沁旗| 蕲春县| 琼结县| 栾川县| 喀什市| 海盐县| 榕江县| 泰来县| 贵定县| 锡林郭勒盟| 花莲市| 乌拉特前旗| 新巴尔虎右旗| 扎鲁特旗| 观塘区| 泉州市| 汉中市| 棋牌| 苍南县| 安陆市| 十堰市| 武夷山市| 庆云县| 庆安县| 文化|