• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2016年12月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567


            專注即時通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215552
            • 排名 - 118

            最新評論

            閱讀排行榜

            轉(zhuǎn)自:戰(zhàn)魂小筑
            原文鏈接:我的Golang全接觸

            滿打滿算, 從好友推薦Golang至發(fā)文時, 使用Golang已經(jīng)有1年多了. 這種時間對于C/C++ Java這些老者來說, 簡直是菜鳥級別的經(jīng)驗(yàn)

            但作為新生代語言的特點(diǎn)就是實(shí)戰(zhàn). Golang這一年里, 已經(jīng)為項(xiàng)目提供了穩(wěn)定的服務(wù)器和強(qiáng)大的擴(kuò)展能力, 與客戶端的Unity3D里的C#一樣, 都是強(qiáng)大, 極致開發(fā)效率代表的優(yōu)秀開發(fā)語言.

            用途篇

            Golang到底拿來做啥? 我需要么?

            高效(性能,開發(fā))的服務(wù)器語言. 包括Web, 游戲, App

            編寫桌面級UI暫不是很適合

            我需要把現(xiàn)在的C++, Python, Erlang等服務(wù)器改成Golang么?

            性能有瓶頸, 開發(fā)效率低, 有錢有時間的話, 完全可以

             

            評價篇

            聽過太多的人對Golang的評價, 大概分為這么幾類:

            C/C++性能黨

            此類黨員對任何事物都追求極致的 性能. 還好Golang是直接生成native code, 否則會被批的體無完膚. 但是由于Golang底層為并發(fā)和開發(fā)效率而做出的一些系統(tǒng), 類似于GC, 調(diào)度器和分配器等, 會在語言層上損失很多性能. 因此C/C++黨還是有理由批Golang性能低下

            Erlang并發(fā)黨

            作為電信級元老, Erlang的模型和架構(gòu)當(dāng)之無愧, OTP擴(kuò)展性超級強(qiáng). 完美的Actor模型也讓邏輯編寫比OO更加直觀

            CSP與Actor區(qū)別僅僅只是在channel的歸屬范圍而已, 但這點(diǎn)細(xì)微差別卻對兩種語言的開發(fā)變的迥然不同

            Golang在并發(fā)模型上選擇了CSP, 就是考慮把架構(gòu)的設(shè)計留給使用者. 像C#一樣建立一個類庫的世界, 而不是MFC一樣的框架世界. 讓開發(fā)更自由

            Erlang的Actor也沒錯. 讓開發(fā)更直觀, 讓崩潰提前來到, 盡快處理

            Rust黨

            Rust在發(fā)文時已經(jīng)發(fā)布了1.0. 這讓R粉興奮的穿梭于各大技術(shù)論壇和討論群

            但Rust的理念在我看來有點(diǎn)偏執(zhí)了, 一定要把各種錯誤在編譯期暴露出來, 所以造出了很多不需要的類型和概念, 連語言都比C語言更符號話

            大白話說來, 有點(diǎn)編程經(jīng)驗(yàn)的人看到JavaScript完全看得懂, 但看Rust卻像天書

            對比同時期的TypeScript, Dart, Swift. Rust就是有點(diǎn)那么獨(dú)辟蹊徑

            該黨黨員經(jīng)常性的用各種特性對比Golang, 追求單特性的優(yōu)秀.

            但其實(shí), Golang本身是一門完整哲學(xué). 很多語言特性互相之間有關(guān)聯(lián). 有設(shè)計不當(dāng)?shù)牡胤? 當(dāng)然更多的是完整體系. 不求和其他語言比

            只追求解決問題的速度

            自定義黨

            云風(fēng)看過Golang后, 因?yàn)樵撜Z言本身就是強(qiáng)化版的C, 因此頗受云風(fēng)喜歡. 但在一堆評價后, 云風(fēng)還是果斷選擇了C+lua的組合寫出的Skynet

            雖然不知道原因, 但我猜的話, 畢竟是對語言本身的可控性還不那么看好

            同時, 我們發(fā)現(xiàn)Skynet使用的是Actor模型, 也發(fā)現(xiàn)大神級的程序員就是有先見.

            轉(zhuǎn)載請注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy

            感觸篇

            設(shè)計

            踏入Golang, 就不要嘗試設(shè)計模式

            傳統(tǒng)的OO在這里是非法的, 嘗試模擬只是一種搞笑

            把OO在Golang里換成復(fù)合+接口

            對實(shí)現(xiàn)者來說, 把各種結(jié)構(gòu)都復(fù)合起來, 對外暴露出一個或多個接口, 接口就好像使用者在實(shí)現(xiàn)模型上打出的很多洞

            別怕全局函數(shù), 包(Package)可以控制全局函數(shù)使用范圍.

            沒必要什么都用interface對外封裝, struct也是一種良好的封裝方法

            Golang無繼承, 因此無需類派生圖. 沒有派生這種點(diǎn)對點(diǎn)的依賴, 因此不會在大量類關(guān)系到來時, 形成繁雜不可變化的樹形結(jié)構(gòu)

             

            容器

            用了很長時間map, 才發(fā)現(xiàn)Golang把map內(nèi)建為語言特性時, 已經(jīng)去掉了外置型map的api特性. 一切的訪問和獲取都是按照語言特性來做的, 原子化

            數(shù)組可以理解為底層對象, 你平時用的都是切片, 不是數(shù)組, 切片就是指針, 指向數(shù)組. 切片是輕量的, 即便值拷貝也是低損耗的

             

            內(nèi)存

            Golang在實(shí)際運(yùn)行中, 你會發(fā)現(xiàn)內(nèi)存可能會瘋漲. 但跑上一段時間后, 就保持穩(wěn)定. 這和Golang的內(nèi)存分配, 垃圾回收有一定的關(guān)系

            現(xiàn)代的編程語言的內(nèi)存管理不會很粗暴的直接從OS那邊分配很多內(nèi)存. 而是按需的不斷分配成塊的內(nèi)存.

            對于非海量級應(yīng)用, Golang本身的內(nèi)存模型完全可以撐得下來. 無需像C++一樣, 每個工程必做內(nèi)存池和線程池

            Channel

            Channel和鎖誰輕量? 一句話告訴你: Channel本身用鎖實(shí)現(xiàn)的. 因此在迫不得已時, 還是盡量減少使用Channel, 但Channel屬于語言層支持, 適度使用, 可以改善代碼可讀寫

            轉(zhuǎn)載請注明: 戰(zhàn)魂小筑http://www.shnenglu.com/sunicdavy

            錯誤

            覺得Golang不停的處理err? 那是因?yàn)槠綍r在其他語言根本沒處理過錯誤, 要不然就是根部一次性try過所有的異常, 這是一種危險的行為

            panic可以被捕獲, 因此編寫服務(wù)器時, 可以做到不掛

             

            危險的interface{}

            這東西就跟C/C++里的void*一樣的危險, nil被interface{}包裹后不會等于nil相等, 但print出來確實(shí)是nil

            模板估計可以解決容器內(nèi)帶interface{}的問題. 但新東西引入, 估計又會讓現(xiàn)在的哲學(xué)一些凌亂


            初學(xué)Tips

            語言學(xué)習(xí)按照官網(wǎng)的教學(xué)走, 跑完基本就會了

            下載一個LiteIDE, 配合Golang的Runtime,基本開環(huán)境就有了

            Golang的類庫設(shè)計方式和C#/C++都不同, 如果有Python經(jīng)驗(yàn)的會感覺毫無違和感

            有一萬個理由造輪子都請住手, 類庫里有你要的東西

            寫大工程請搜索: Golang項(xiàng)目目錄結(jié)構(gòu)組織

            Golang語言本身本人沒有發(fā)現(xiàn)bug, 即便有也早就被大神們捉住了. 唯一的一個感覺貌似bug的, 經(jīng)常是結(jié)構(gòu)體成員首字母小寫, 但是json又無法序列化出來…

            慎用cgo. 官方已經(jīng)聲明未來對cgo不提供完整兼容性. 任何一門語言在早期都需要對C做出支持, 但后期完善后的不兼容都是常態(tài)

            posted on 2016-12-24 09:23 思月行云 閱讀(148) 評論(0)  編輯 收藏 引用 所屬分類: Golang
            色综合合久久天天综合绕视看| 久久久久久久综合综合狠狠| 青草国产精品久久久久久| 亚洲va久久久噜噜噜久久天堂| 久久美女网站免费| 亚洲国产精品嫩草影院久久| 久久久久久国产精品无码超碰| 久久精品国产精品亚洲| 久久人人爽爽爽人久久久| 精品久久久久久无码人妻热 | 久久福利片| 亚洲精品美女久久久久99| 亚洲一本综合久久| 久久久久久久亚洲Av无码| 亚洲精品美女久久久久99小说| 国产精品99久久精品| 偷窥少妇久久久久久久久| 久久精品国产99久久丝袜| 99久久这里只有精品| 99精品国产免费久久久久久下载| 亚洲午夜久久影院| 久久er热视频在这里精品| 久久综合给久久狠狠97色| 欧美黑人激情性久久| 久久人妻少妇嫩草AV蜜桃| 国产日韩久久免费影院| 久久电影网一区| 国产精品久久久久…| 国产精品一区二区久久不卡| 一本一本久久aa综合精品| 模特私拍国产精品久久| 亚洲欧美另类日本久久国产真实乱对白 | 久久精品国产72国产精福利| 99久久久精品免费观看国产| 天堂久久天堂AV色综合| 99久久综合国产精品免费| 噜噜噜色噜噜噜久久| 久久久久人妻一区二区三区| 久久久久久午夜精品| 久久综合亚洲色一区二区三区| 久久精品桃花综合|