您好,登錄后才能下訂單哦!
作者 |?楊成立(忘籬) 阿里巴巴高級技術專家
關注“阿里巴巴云原生”公眾號,回復 Go 即可查看清晰知識大圖!
導讀:從問題本身出發,不局限于 Go 語言,探討服務器中常常遇到的問題,最后回到 Go 如何解決這些問題,為大家提供 Go 開發的關鍵技術指南。我們將以系列文章的形式推出《Go 開發的關鍵技術指南》,共有 4 篇文章,本文為第 1 篇。
該指南主要討論了服務器領域常見的并發問題,也涉及到了工程化相關的問題,還整理了 C 背景程序員對于 Go 的 GC 以及性能的疑問,探討了 Go 的錯誤處理和類型系統最佳實踐,以及依賴管理的難處、接口設計的正交性,當然也包含我們在服務器開發中對于 Go 實踐的總結,有時候也會對一些有趣的問題做深度的挖掘,列出了 Go 重要的事件和資料集合,以及 Go2 的進展和思考。
以下是各個章節以及簡介:
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 呢?有以下理由:
為什么在名字上要這么糾結呢?嗯嗯,不糾結,讓我們開始干雞湯吧。
考慮一個商用的快速發展的業務后端服務器,最重要的是什么?當然是穩定性了,如果崩潰可能會造成用戶服務中斷,崩潰的問題在 C/C++ 服務器中幾乎是必然的:
想象一個 C 服務器,一般不會重頭碼所有的代碼,會從一個開源版本開始,或者從一些網絡和線程庫開始,然后不斷改進和完善。由于業務前期并不復雜,上線也沒有發現問題,這時候可以說 C 服務器是穩定的嗎?當然不是,只是 Bug 沒有觸發而已,所有崩潰的 Bug 幾乎都不是本次發布導致的。野指針和越界是 C 服務器中最難搞定的狼人,這些狼人還喜歡玩潛伏。
一般業務會突飛猛進,特別是越偏上層的業務,需要后端處理的邏輯就越多,至于 UTest 和測試一般只存在于傳說中,隨著業務的發展,潛伏的狼人越來越多,甚至開源的庫和服務器中的狼人也開始出來作妖。夜路走多了,總會碰到鬼,碰到鬼了怎么辦?當然是遇鬼殺鬼了,還能被它嚇尿不成,所以就反思解決 Bug,費了老勁、又白了幾根頭發,終于迎來短暫安寧,然后繼續寫 Bug。
空指針問題相對很容易查,除零之類的典型錯誤也容易處理。最完善的解決辦法,就是實現 GC,讓指針總是有效,無效后再釋放,越界時能檢測到,這樣容易解決問題;其實 Go 早期的版本就和這個很類似了,要實現帶 GC 的 C 的同學,可以參考下 Go 的實現。
如何能直接獲取線上的 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 語言的關鍵字:
參考?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 的特性我們做一次探討和分析。
接下來看一下有關 Go 的重要事件:
sort.Slice
?使排序使用更簡單;for
?支持三種迭代寫法;Data Race Detector
?等;點擊下載《不一樣的 雙11 技術:阿里巴巴經濟體云原生實踐》
本書亮點
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術圈。”
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。