不知讀者是否也會(huì)時(shí)刻想: 我該怎么寫(xiě)這段代碼才優(yōu)雅, 后期改起來(lái)方便?
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、福清網(wǎng)站維護(hù)、網(wǎng)站推廣。
努力思考卻還是得不到最佳答案, 煩躁等負(fù)面情緒不約而來(lái)。這便是在編程過(guò)程中的心智負(fù)擔(dān)。
這篇文章將從多個(gè)方面來(lái)簡(jiǎn)化思考, 希望它能給努力思考的你帶來(lái)一點(diǎn)小靈感.
java的23種設(shè)計(jì)模式? 再見(jiàn).
不是說(shuō)他們沒(méi)有作用,只是說(shuō)它們太死板復(fù)雜,學(xué)習(xí)它們通常入不敷出。
對(duì)于編程還有很多需要注意的地方(下文),而不要只局限于設(shè)計(jì)模式。
我給出的建議是只需要理解一個(gè)大概,在平時(shí)編程中能用則用。
Golang相比Java來(lái)說(shuō), 對(duì)"面向?qū)ο?這件事的支持是"不完整"的.
但話又說(shuō)回來(lái)現(xiàn)在的"面向?qū)ο缶幊?漸漸被扭曲為了"面向類(lèi)編程"(COP),而COP是復(fù)雜并難以理解的,COP有好處但要發(fā)揮出來(lái)并不容易。所以Golang決定拋棄所有不必要的概念以改善這個(gè)問(wèn)題。
現(xiàn)在不必再理解 封裝(這個(gè)簡(jiǎn)單到不需要理解), 多態(tài), 繼承.
在golang中只需要理解兩個(gè)更實(shí)在的東西: 接口, 組合.
接口
在Golang中只需要記得一個(gè)東西: Interface(接口).
參見(jiàn)io.Reader接口就知道這種設(shè)計(jì)有多厲害.
讀文件是它, 讀網(wǎng)絡(luò)請(qǐng)求也是它, 更騷的是 對(duì)于linux(Every thing is a file)來(lái)說(shuō)用它就能操作近乎整個(gè)系統(tǒng)了.
簡(jiǎn)單的說(shuō): 當(dāng)某個(gè)功能(如去北京)有多種(或者以后可能有多種)實(shí)現(xiàn)方式(如坐火車(chē)/飛機(jī)/騎車(chē))的時(shí)候, 用接口.
組合
組合理解起來(lái)并不復(fù)雜, 不過(guò)是一個(gè)語(yǔ)法糖, 就算沒(méi)有組合功能也毫不影響Go程序的運(yùn)行.
如下代碼, 沒(méi)有組合換一種寫(xiě)法即可.
簡(jiǎn)單的說(shuō): 組合能用則用,如果你不知道如何使用或者不用也并無(wú)大礙。
"開(kāi)閉原則"對(duì)我啟發(fā)很大.
原文是這樣:
但其實(shí)我們?cè)陂_(kāi)發(fā)的時(shí)候并不是一直都在和對(duì)象打交道.
在我看來(lái), "開(kāi)閉原則"適用于平時(shí)寫(xiě)的任何代碼.
完整理解"開(kāi)閉原則"可能還是會(huì)造成心智負(fù)擔(dān), 所以先打住, 只需要這樣:
這便是 "對(duì)修改閉合, 對(duì)擴(kuò)展開(kāi)放".
這里不得不在提及"面向函數(shù)編程", 它的思想包括但不限于:
它正好利于修改, 利于寫(xiě)出符合"開(kāi)閉原則"的代碼.
默認(rèn)的errors包在對(duì)于多層的復(fù)雜應(yīng)用是不夠的,這種情況下建議自行封裝,但別太追求完美 在項(xiàng)目中夠用就好。我們等待官方方案即可:
restful能解決大部分命名問(wèn)題.
你的代碼完全可以這樣無(wú)腦命名而不失優(yōu)雅.
這樣的白話文真的很好命名與理解(根本不需要詞匯量).
無(wú)腦Goroution, 80%的情況下都沒(méi)問(wèn)題.
如果你實(shí)在擔(dān)心, 用channel的做下并發(fā)數(shù)量控制就好, 或者使用更完整的工具叫"協(xié)程池", 他們的實(shí)現(xiàn)都不復(fù)雜.
得益于golang的開(kāi)源和這幾年的蓬勃發(fā)展,golang的生態(tài)已經(jīng)十分完善,所以很多情況下我們應(yīng)該"面相github編程",第三方提供的代碼已能滿(mǎn)足我們大多數(shù)需求。同時(shí) 選用一個(gè)受歡迎的第三方代碼庫(kù)通常比自己的更可靠,后續(xù)維護(hù)也省心很多。
最省心的行為是: 先跟隨團(tuán)隊(duì)再提出意見(jiàn)
1、服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來(lái)做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。
2、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理器、中間件:例如Etcd。
3、網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實(shí)現(xiàn)了。
4、開(kāi)發(fā)云平臺(tái):目前國(guó)外很多云平臺(tái)在采用Go開(kāi)發(fā),我們所熟知的七牛云、華為云等等都有使用Go進(jìn)行開(kāi)發(fā)并且開(kāi)源的成型的產(chǎn)品。
5、區(qū)塊鏈:目前有一種說(shuō)法,技術(shù)從業(yè)人員把Go語(yǔ)言稱(chēng)作為區(qū)塊鏈行業(yè)的開(kāi)發(fā)語(yǔ)言。如果大家學(xué)習(xí)區(qū)塊鏈技術(shù)的話,就會(huì)發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應(yīng)用都是采用Go進(jìn)行開(kāi)發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有g(shù)o語(yǔ)言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發(fā)布以來(lái),go語(yǔ)言引起了眾多開(kāi)發(fā)者的關(guān)注,并得到了廣泛的應(yīng)用。go語(yǔ)言簡(jiǎn)單、高效、并發(fā)的特點(diǎn)吸引了許多傳統(tǒng)的語(yǔ)言開(kāi)發(fā)人員,其數(shù)量也在不斷增加。
使用 Go 語(yǔ)言開(kāi)發(fā)的開(kāi)源項(xiàng)目非常多。早期的 Go 語(yǔ)言開(kāi)源項(xiàng)目只是通過(guò) Go 語(yǔ)言與傳統(tǒng)項(xiàng)目進(jìn)行C語(yǔ)言庫(kù)綁定實(shí)現(xiàn),例如 Qt、Sqlite 等。
后期的很多項(xiàng)目都使用 Go 語(yǔ)言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過(guò)程相對(duì)于其他語(yǔ)言要簡(jiǎn)單一些,這也促成了大量使用 Go 語(yǔ)言原生開(kāi)發(fā)項(xiàng)目的出現(xiàn)。
Go作為Google2009年推出的語(yǔ)言,其被設(shè)計(jì)成一門(mén)應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類(lèi)似用途的巨型中央服務(wù)器的系統(tǒng)編程語(yǔ)言。
對(duì)于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語(yǔ)言無(wú)疑比大多數(shù)其它語(yǔ)言有著更高的開(kāi)發(fā)效率。它提供了海量并行的支持,這對(duì)于 游戲 服務(wù)端的開(kāi)發(fā)而言是再好不過(guò)了。
到現(xiàn)在Go的開(kāi)發(fā)已經(jīng)是完全開(kāi)放的,并且擁有一個(gè)活躍的社區(qū)。
=================================
哪些大公司在使用Go語(yǔ)言:
1、Google
這個(gè)不用多做介紹,作為開(kāi)發(fā)Go語(yǔ)言的公司,當(dāng)仁不讓。Google基于Go有很多優(yōu)秀的項(xiàng)目,比如: ,大家也可以在Github上 查看更多Google的Go開(kāi)源項(xiàng)目。
2、Facebook
Facebook也在用,為此他們還專(zhuān)門(mén)在Github上建立了一個(gè)開(kāi)源組織facebookgo,大家可以通過(guò) 訪問(wèn)查看facebook開(kāi)源的項(xiàng)目,比如著名的是平滑升級(jí)的grace。
3、騰訊
騰訊作為國(guó)內(nèi)的大公司,還是敢于嘗試的,尤其是Docker容器化這一塊,他們?cè)?5年已經(jīng)做了docker萬(wàn)臺(tái)規(guī)模的實(shí)踐,具體可以參考
4、百度
目前所知的百度的使用是在運(yùn)維這邊,是百度運(yùn)維的一個(gè)BFE項(xiàng)目,負(fù)責(zé)前端流量的接入。他們的負(fù)責(zé)人在2016年有分享,大家可以看下這個(gè)
5、阿里
阿里巴巴具體的項(xiàng)目不太清楚,不過(guò)聽(tīng)說(shuō)其系統(tǒng)部門(mén)、CDN等正在招Go方面的人。
6、京東
京東云消息推送系統(tǒng)、云存儲(chǔ),以及京東商城等都有使用Go做開(kāi)發(fā)。
7、小米
小米對(duì)Golang的支持,莫過(guò)于運(yùn)維監(jiān)控系統(tǒng)的開(kāi)源,也就是
此外,小米互娛、小米商城、小米視頻、小米生態(tài)鏈等團(tuán)隊(duì)都在使用Golang。
8、360
360對(duì)Golang的使用也不少,一個(gè)是開(kāi)源的日志搜索系統(tǒng)Poseidon,托管在Github上,
==================================
Go適合做什么?為何這么多人偏愛(ài)Go語(yǔ)言?
Go強(qiáng)大的開(kāi)發(fā)團(tuán)隊(duì)
1、自由高效:組合的思想、無(wú)侵入式的接口
Go語(yǔ)言可以說(shuō)是開(kāi)發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語(yǔ)言支持當(dāng)前所有的編程范式,包括過(guò)程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。程序員們可以各取所需、自由組合、想怎么玩就怎么玩。
2、強(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í)用。
3、部署方便:二進(jìn)制文件、Copy部署
我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖懔耍袁F(xiàn)在也有很多人用Go開(kāi)發(fā)運(yùn)維程序。
4、簡(jiǎn)單的并發(fā)
它包含了降低心智的并發(fā)和簡(jiǎn)易的數(shù)據(jù)同步,我覺(jué)得這是Go最大的特色。之所以寫(xiě)正確的并發(fā)、容錯(cuò)和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e(cuò)誤的工具和錯(cuò)誤的抽象,Go可以說(shuō)這一塊做的相當(dāng)簡(jiǎn)單。
5、穩(wěn)定性
Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會(huì)更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期(開(kāi)發(fā)、測(cè)試、部署、維護(hù)等等)的各個(gè)環(huán)節(jié)的工具,如go tool、gofmt、go test。
================================
我們?yōu)槭裁催x擇GO語(yǔ)言
選擇GO語(yǔ)言,主要是基于兩方面的考慮
1. 執(zhí)行性能 縮短API的響應(yīng)時(shí)長(zhǎng),解決批量請(qǐng)求訪問(wèn)超時(shí)的問(wèn)題。在Uwork的業(yè)務(wù)場(chǎng)景下,一次API批量請(qǐng)求,往往會(huì)涉及對(duì)另外接口服務(wù)的多次調(diào)用,而在之前的PHP實(shí)現(xiàn)模式下,要做到并行調(diào)用是非常困難的,串行處理卻不能從根本上提高處理性能。而GO語(yǔ)言不一樣,通過(guò)協(xié)程可以方便的實(shí)現(xiàn)API的并行處理,達(dá)到處理效率的最大化。 依賴(lài)Golang的高性能HTTP Server,提升系統(tǒng)吞吐能力,由PHP的數(shù)百級(jí)別提升到數(shù)千里甚至過(guò)萬(wàn)級(jí)別。
2. 開(kāi)發(fā)效率 GO語(yǔ)言使用起來(lái)簡(jiǎn)單、代碼描述效率高、編碼規(guī)范統(tǒng)一、上手快。 通過(guò)少量的代碼,即可實(shí)現(xiàn)框架的標(biāo)準(zhǔn)化,并以統(tǒng)一的規(guī)范快速構(gòu)建API業(yè)務(wù)邏輯。 能快速的構(gòu)建各種通用組件和公共類(lèi)庫(kù),進(jìn)一步提升開(kāi)發(fā)效率,實(shí)現(xiàn)特定場(chǎng)景下的功能量產(chǎn)。
Go語(yǔ)言近兩年的發(fā)展速度還是非常快的,一方面Go語(yǔ)言有強(qiáng)大的行業(yè)背書(shū),另一方面Go語(yǔ)言在設(shè)計(jì)時(shí)充分考慮了當(dāng)前的編程環(huán)境,加強(qiáng)了大數(shù)據(jù)量、高并發(fā)等應(yīng)用場(chǎng)景的處理能力,強(qiáng)調(diào)編程語(yǔ)言自身對(duì)于處理性能的追求,相信Go語(yǔ)言在未來(lái)大數(shù)據(jù)和人工智能相關(guān)技術(shù)逐漸落地應(yīng)用的背景下,會(huì)有一個(gè)較為廣闊的發(fā)展空間。
分享標(biāo)題:go語(yǔ)言設(shè)計(jì)模式責(zé)任鏈 go語(yǔ)言gui框架
當(dāng)前地址:http://chinadenli.net/article12/dogchdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、微信公眾號(hào)、服務(wù)器托管、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)
猜你還喜歡下面的內(nèi)容