日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?楊成立(忘籬) 阿里巴巴高級技術專家

關注“阿里巴巴云原生”公眾號,回復 Go 即可查看清晰知識大圖!

導讀:從問題本身出發,不局限于 Go 語言,探討服務器中常常遇到的問題,最后回到 Go 如何解決這些問題,為大家提供 Go 開發的關鍵技術指南。我們將以系列文章的形式推出《Go 開發的關鍵技術指南》,共有 4 篇文章,本文為第 1 篇。

Go 開發指南大圖

Overview

該指南主要討論了服務器領域常見的并發問題,也涉及到了工程化相關的問題,還整理了 C 背景程序員對于 Go 的 GC 以及性能的疑問,探討了 Go 的錯誤處理和類型系統最佳實踐,以及依賴管理的難處、接口設計的正交性,當然也包含我們在服務器開發中對于 Go 實踐的總結,有時候也會對一些有趣的問題做深度的挖掘,列出了 Go 重要的事件和資料集合,以及 Go2 的進展和思考。

以下是各個章節以及簡介:

  • About the Name:為何 Go 有時候也叫 Golang?
  • Why Go:為何要選擇 Go 作為服務器開發的語言?是沖動?還是騷動?
  • Milestones:Go 的重要里程碑和事件,當年吹的那些牛逼,都實現了哪些?
  • GC:Go 的 GC 靠譜嗎?Twitter 說相當的靠譜,有圖有真相。
  • Could Not Recover:君可知,有什么 panic 是無法 recover 的?包括超過系統線程限制,以及 map 的競爭寫。當然一般都能 recover,比如 Slice 越界、nil 指針、除零、寫關閉的 chan 等。
  • Declaration Syntax:為何 Go 語言的聲明語法是那樣的?C 語言的聲明語法又是怎樣的?是拍的大腿,還是拍的腦袋?
  • Errors:為什么 Go2 的草稿 3 個中有 2 個是關于錯誤處理的?好的錯誤處理應該怎么做?錯誤和異常機制的差別是什么?錯誤處理和日志如何配合?
  • Logger:為什么標準庫的 Logger 是完全不夠用的?怎么做日志切割和輪轉?怎么在混成一坨的服務器日志中找到某個連接的日志?甚至連接中的流的日志?怎么做到簡潔又夠用?
  • Type System:什么是面向對象的 SOLID 原則?為何 Go 更符合 SOLID?為何接口組合比繼承多態更具有正交性?Go 類型系統如何做到 looser、organic、decoupled、independent and therefore scalable?
  • Orthogonal:一般軟件中如果出現數學,要么真的牛逼,要么就是裝逼。正交性這個數學概念在 Go 中頻繁出現,是神仙還是妖怪?為何接口設計要考慮正交性?
  • Modules:如何避免依賴地獄(Dependency Hell)?小小的版本號為何會帶來大災難?Go 為什么推出了 GOPATH、Vendor 還要搞 module 和 vgo?新建了 16 個倉庫做測試,碰到了 9 個坑,搞清楚了 gopath 和 vendor 如何遷移?以及 vgo with vendor 如何使用(畢竟生產環境不能每次都去外網下載)?
  • Concurrency:服務器中的并發處理難在哪里?為什么說 Go 并發處理優勢占領了云計算開發語言市場?什么是 C10K、C10M 問題?
  • Context:如何管理 goroutine 的取消、超時和關聯取消?為何 Go1.7 專門將 context 放到了標準庫?context 如何使用以及問題在哪里?
  • Engineering:Go 在工程化上的優勢是什么?為什么說 Go 是一門面向工程的語言?覆蓋率要到多少比較合適?什么叫代碼可測性?為什么良好的庫必須先寫 Example?
  • Go2 Transition:Go2 會像 Python3 不兼容 Python2 那樣作嗎?C 和 C++ 的語言演進可以有什么不同的收獲?Go2 怎么思考語言升級的問題?
  • Documents:Go 官網的重要文檔分類,本屌絲讀了四遍了,推薦閱讀。
  • SRS:Go 在流媒體服務器中的使用。

About the Name

The Go Programming Language 到底是該叫 GO 還是 GOLANG?Google 搜?Why Go is called Golang?能搜到幾篇經典帖子。

Rob Pike 在 Twitter 上特意說明是 Go,可以看這個?The language is called Go:

Neither. The language is called Go, not Golang. http://golang.org ?is just the the web site address, not the name of the language.

在另外一個地方也說明了是 Go,可以看這個?The name of our language is go:

The name of our language is Go Ruby is called Ruby, not Rubylang. Python is called Python, not Pythonlang. C is called C, not Clang. No. Wait. That was a bad example. Go is called Go, not Golang.Yes, yes, I know all about the searching and meta tags. Sure, whatever, but that doesn't change the fact that the name of the language is Go.Thank you for your consideration.

這里舉了各種例子說明為何不加 lang 的后綴,當然有個典型的語言是加的,就是?Erlang。于是就有回復說“Erlang Erlang, Let’s just call it Er.”

那么為什么大多時候 Go 和 Golang 都很常用呢?在?Why is the Go programming language usually called Golang?中說的比較清楚:

It’s because “go domain” has been registered by Walt Disney and so Go creators couldn’t use it. So, they have decided to use golang for the domain name. Then the rest came.Also, it’s harder to search things on search engines just using the word Go. Although, Rob Pike is against this idea but I disagree. Most of the time, for the correct results you need to search for golang.It’s just Go, not golang but it sticked to it.

講個笑話先,用百度搜下為何 Go 叫做 Golang,一大片都是類似本文的雞湯煲,告訴你為何 Go 才是天地間最合適你的語言,當然本文要成為雞湯煲中的戰斗煲,告訴你全家都應該選擇 Go 語言。

為何 Go 語言名字是 Go,但是經常說成是 Golang 呢?有以下理由:

  • go.org?被注冊了,正在賣,也不貴才 1698 萬。所以 Go 只能用?golang.org;
  • 想要搜點啥信息時,如果搜 go 太寬泛了,特別是 go 還沒有這么多用戶時,搜 golang 能更精確的找到答案。
  • 為什么在名字上要這么糾結呢?嗯嗯,不糾結,讓我們開始干雞湯吧。

    Why Go?

    考慮一個商用的快速發展的業務后端服務器,最重要的是什么?當然是穩定性了,如果崩潰可能會造成用戶服務中斷,崩潰的問題在 C/C++ 服務器中幾乎是必然的:

    • 穩定是一種假象;

    想象一個 C 服務器,一般不會重頭碼所有的代碼,會從一個開源版本開始,或者從一些網絡和線程庫開始,然后不斷改進和完善。由于業務前期并不復雜,上線也沒有發現問題,這時候可以說 C 服務器是穩定的嗎?當然不是,只是 Bug 沒有觸發而已,所有崩潰的 Bug 幾乎都不是本次發布導致的。野指針和越界是 C 服務器中最難搞定的狼人,這些狼人還喜歡玩潛伏。

    • 穩定是短暫的,不穩定是必然和長期的;

    一般業務會突飛猛進,特別是越偏上層的業務,需要后端處理的邏輯就越多,至于 UTest 和測試一般只存在于傳說中,隨著業務的發展,潛伏的狼人越來越多,甚至開源的庫和服務器中的狼人也開始出來作妖。夜路走多了,總會碰到鬼,碰到鬼了怎么辦?當然是遇鬼殺鬼了,還能被它嚇尿不成,所以就反思解決 Bug,費了老勁、又白了幾根頭發,終于迎來短暫安寧,然后繼續寫 Bug。

    • 最普遍的問題還是內存問題導致崩潰,一般就是野指針和越界;

    空指針問題相對很容易查,除零之類的典型錯誤也容易處理。最完善的解決辦法,就是實現 GC,讓指針總是有效,無效后再釋放,越界時能檢測到,這樣容易解決問題;其實 Go 早期的版本就和這個很類似了,要實現帶 GC 的 C 的同學,可以參考下 Go 的實現。

    • 線上的 CPU 和內存的問題,一般不方便使用工具查看,而線上的問題有時候很難在本地重現。

    如何能直接獲取線上的 Profile 數據,需要程序本身支持。比如提供 HTTP API 能獲取到 Profile 數據,關鍵是如何采集這些數據。

    Go 的使命愿景和價值觀:

    Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

    Go is a concurrent open source programming language developed at Google. Combines native compilation and static types with a lightweight dynamic feel. Fast, fun, and productive.>

    Go is an attempt to make programmers more productive. The first goal is to make a better language to meet the challenges of scalable concurrency. The larger goal is to make a better environment to meet the challenges of scalable software development, software worked on and used by many people, with limited coordination between them, and maintained for years.

    Go 語言的關鍵字:

    • 運行性能高: Statically typed. Native code generation (compiled). Efficiency. Fast development cycle.
    • 碼農不苦逼: Memory safe. Garbage collected. Safety.
    • 云計算專享: Native concurrency support. Concurrency. Scalability.
    • 工程師思維: Composition via interfaces. Excellent standard library. Great tools.

    參考?The Path to Go1: What is Go??和?Another Go at Language Design。

    參考?> Go: a simple programming environment。

    Go 是面向軟件工程的語言,Go 在工程上的思考可以讀?Go at Google: Language Design in the Service of Software Engineering?和?Less is exponentially more。Go 最初是解決 Google 遇到的大規模系統和計算的問題,這些問題如今被稱為云計算,參考?Go, Open Source, Community。

    GITHUT上顯示 Go 的項目和 PR 一直在上升,如下圖所示。

    2014?云計算行業中使用 Go 的有:Docker, Kubernetes, Packer, Serf, InfluxDB, Cloud Foundry’s gorouter and CLI, CoreOS’s etcd and fleet, Vitess | YouTube’s tooling for MySQL scaling, Canonical’s Juju (rewritten in Go), Mozilla’s Heka, A Go interface to OpenStack Swift, Heroku’s Force.com and hk CLIs, Apcera’s NATS and gnatsd。

    2018?年全球使用 Go 的公司數目有:US(329), Japan(79), Brazil(52), India(49), Indonesia(45), China(32), UK(32), Germany(28), Israel(24), France(17), Netherlands(16), Canada (15), Thailand(14), Turkey(14), Spain(12), Poland(11), Australia(9), Russia(9), Iran(8), Sweden(7), Korea(South)(6), Switzerland(6), Ukraine(5)。

    參考?Go as the emerging language of cloud infrastructure、The RedMonk Programming Language Rankings: June 2018,還有?GoUsers?以及?Success Stories。

    參考?> “Go: 90% Perfect, 100% of the time” -bradfitz, 2014。參考?> Nine years of Go: Go Contributors,社區貢獻的代碼比例。

    我們一起看看這些 Go 牛逼的特性,詳細分析每個點,雖然不能涵蓋所有的點,對于常用的 Go 的特性我們做一次探討和分析。

    Milestones

    接下來看一下有關 Go 的重要事件:

    • 2019 年 9 月,Go1.13?發布。增強了?modules,新增了環境變量 GOPRIVATE 和 GOSUMDB,GOPROXY 支持多個,支持了?ErrorWraping;
    • 2019 年 2 月,Go1.12?發布,支持了 TLS1.3,改進了 modules,優化運行時和標準庫;
    • 2018 年 8 月,Go1.11?發布,實驗性支持?modules,實驗性支持?WebAssembly;
    • 2018 年 2 月,Go1.10?發布,go tool 緩存編譯,編譯加速,很多細微的改進;
    • 2018 年 1 月,Hello, 中國!?及?中國站鏡像上線,大陸可以訪問官網資源;
    • 2017 年 8 月,Go1.9?發布,支持?Type Alias、sync.Map,使用場景參考?slides,time 保持單增避免時間測量問題;
    • 2017 年 2 月,Go1.8?發布,顯著的性能提升,GC 延遲降低到了?10us 到 100us,支持?HTTP/2 Push,HTTP Server 支持?Shutdown,sort.Slice?使排序使用更簡單;
    • 2016 年 8 月,Go1.7?發布,支持了?Context,Context 在?K8s 和 Docker?中都有應用,新的編譯算法減少 20%-30% 的二進制尺寸;
    • 2016 年 2 月,Go1.6?發布,支持?HTTP/2,HTTPS 時會默認開啟?HTTP/2,正式支持?vendor;
    • 2015 年 8 月,Go1.5?發布,完全用 Go?代替了 C?代碼,完全重新設計和重新實現 GC,支持?internal?的 package,實驗性支持 vendor,GOMAXPROCS 默認為 CPU 個數;
    • 2014 年 12 月,Go1.4?發布,支持 Android,從 Mecurial 遷移到了 Git,從 GoogleCode 遷移到了?Github: golang/go,大部分?runtime 的代碼從 C 改成了 Go,for?支持三種迭代寫法;
    • 2014 年 6 月,Go1.3?發布,支持了 FreeBSD、Plan9、Solaris 等系統;
    • 2013 年 12 月,Go1.2?發布,新增收集覆蓋率工具?coverage,限制了最高線程數?ThreadLimit;
    • 2013 年 5 月,Go1.1?發布,主要是包含性能優化,新增?Data Race Detector?等;
    • 2012 年 3 月,Go1.0?發布,包含了基本的語言元素比如 rune、error、map,標準庫包括 bufio、crypto、flag、http、net、os、regexp、runtime、unsafe、url、encoding 等;
    • 2009 年 11 月, Google 宣布要開發一門新語言,既要開源,又有 Python 的好處,還要有 C/C++ 的性能。GO 是 BSD 的?License,大部分 GO 的項目都是 BSD 或 MIT 或 Apache 等商業友好的協議。

    點擊下載《不一樣的 雙11 技術:阿里巴巴經濟體云原生實踐》

    本書亮點

    • 雙11 超大規模 K8s 集群實踐中,遇到的問題及解決方法詳述
    • 云原生化最佳組合:Kubernetes+容器+神龍,實現核心系統 100% 上云的技術細節
    • 雙 11 Service Mesh 超大規模落地解決方案

    “阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術圈。”

    總結

    以上是生活随笔為你收集整理的Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人a视频 | 成人亚洲玉足脚交系列 | 国产第2页 | 黄色aa视频| 欧美成人久久 | 不卡影院 | 野花视频在线免费观看 | 久一久久| 看了让人下面流水的视频 | 在线观看中文字幕一区 | 中文字幕精品一区久久久久 | 极品白嫩丰满美女无套 | 日精品| 亚洲欧洲视频在线观看 | 天天干天天舔天天操 | 毛片免费播放 | av色图在线 | 国产a自拍| 九九五月天 | 天天想你在线观看完整版电影高清 | 欧美亚洲综合久久 | 亚洲欧美精品一区二区 | 日本一本一道 | 乳女教师の诱惑julia | 婷婷激情四射 | 艳妇乳肉豪妇荡乳av | 激情综合五月天 | 天天插日日干 | 免费美女毛片 | 欧美日韩一区免费 | 欧美日韩不卡 | 男人的天堂一区 | 日本理论片中文字幕 | 成人18视频 | 黄色一级片视频 | 国产麻豆精品一区二区 | 国产aa | 欧美伦乱| 三级网站免费看 | 国产精品va无码一区二区 | 激情综合网站 | 精品无码久久久久久久久久 | 国产欧美日韩视频 | 性少妇videosexfre | 亚洲不卡在线视频 | 影音先锋激情在线 | 亚洲一级电影 | 欧美日韩在线一区 | 高潮毛片7777777毛片 | 国产精品每日更新 | 98精品国产| 日本一区免费看 | av网在线 | 欧美日韩一区二区在线视频 | 精品91久久久久久 | 国产二级一片内射视频播放 | 成 人片 黄 色 大 片 | 亚洲欧美色视频 | 俺来也在线视频 | 美女被男人插 | 亚洲免费区 | 国产精品一级 | 亚洲国产精品一区二区三区 | 精品在线视频一区二区三区 | 大片av| 一区二区 亚洲 | 日本久久成人 | 精品免费国产 | 四虎中文字幕 | 日韩无套无码精品 | 亚洲涩视频 | 中文字幕精品一区久久久久 | 国产精品白浆一区二小说 | 国产精品啪 | 91麻豆精品久久久久蜜臀 | 国产午夜精品免费一区二区三区视频 | 欧美成人一级 | 大咪咪dvd| 亚洲天堂色图 | 国产在线不卡视频 | 欧美激情精品久久久久久蜜臀 | 国产黄色精品 | 四虎在线精品 | 超碰综合 | 双性皇帝高h喷汁呻吟 | 窝窝视频在线 | 中文国产在线观看 | 亚洲一区二区三区无码久久 | 欧美片17c07.com| 少女视频的播放方法 | 91黄色免费版 | 日日夜夜操av | 综合色av | 99久久婷婷国产综合精品电影 | 国产人妻精品一区二区三区 | 欧美国产成人在线 | 一区黄色 | 亚洲综合插 | 久久久一级 |