真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go開(kāi)發(fā)關(guān)鍵技術(shù)指南|為什么你要選擇GO?(內(nèi)含超全知識(shí)大圖)-創(chuàng)新互聯(lián)

作者 |?楊成立(忘籬) 阿里巴巴高級(jí)技術(shù)專(zhuān)家

成都創(chuàng)新互聯(lián)長(zhǎng)期為上1000+客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為新豐企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),新豐網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

關(guān)注“阿里巴巴云原生”公眾號(hào),回復(fù) Go 即可查看清晰知識(shí)大圖!

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

Go 開(kāi)發(fā)指南大圖

Go 開(kāi)發(fā)關(guān)鍵技術(shù)指南 | 為什么你要選擇 GO?(內(nèi)含超全知識(shí)大圖)

Overview

該指南主要討論了服務(wù)器領(lǐng)域常見(jiàn)的并發(fā)問(wèn)題,也涉及到了工程化相關(guān)的問(wèn)題,還整理了 C 背景程序員對(duì)于 Go 的 GC 以及性能的疑問(wèn),探討了 Go 的錯(cuò)誤處理和類(lèi)型系統(tǒng)最佳實(shí)踐,以及依賴(lài)管理的難處、接口設(shè)計(jì)的正交性,當(dāng)然也包含我們?cè)诜?wù)器開(kāi)發(fā)中對(duì)于 Go 實(shí)踐的總結(jié),有時(shí)候也會(huì)對(duì)一些有趣的問(wèn)題做深度的挖掘,列出了 Go 重要的事件和資料集合,以及 Go2 的進(jìn)展和思考。

以下是各個(gè)章節(jié)以及簡(jiǎn)介:

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

About the Name

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

Rob Pike 在 Twitter 上特意說(shuō)明是 Go,可以看這個(gè)?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.

在另外一個(gè)地方也說(shuō)明了是 Go,可以看這個(gè)?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.

這里舉了各種例子說(shuō)明為何不加 lang 的后綴,當(dāng)然有個(gè)典型的語(yǔ)言是加的,就是?Erlang。于是就有回復(fù)說(shuō)“Erlang Erlang, Let's just call it Er.”

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

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.

講個(gè)笑話(huà)先,用百度搜下為何 Go 叫做 Golang,一大片都是類(lèi)似本文的雞湯煲,告訴你為何 Go 才是天地間最合適你的語(yǔ)言,當(dāng)然本文要成為雞湯煲中的戰(zhàn)斗煲,告訴你全家都應(yīng)該選擇 Go 語(yǔ)言。

為何 Go 語(yǔ)言名字是 Go,但是經(jīng)常說(shuō)成是 Golang 呢?有以下理由:

  1. go.org?被注冊(cè)了,正在賣(mài),也不貴才 1698 萬(wàn)。所以 Go 只能用?golang.org;
  2. 想要搜點(diǎn)啥信息時(shí),如果搜 go 太寬泛了,特別是 go 還沒(méi)有這么多用戶(hù)時(shí),搜 golang 能更精確的找到答案。

為什么在名字上要這么糾結(jié)呢?嗯嗯,不糾結(jié),讓我們開(kāi)始干雞湯吧。

Why Go?

考慮一個(gè)商用的快速發(fā)展的業(yè)務(wù)后端服務(wù)器,最重要的是什么?當(dāng)然是穩(wěn)定性了,如果崩潰可能會(huì)造成用戶(hù)服務(wù)中斷,崩潰的問(wèn)題在 C/C++ 服務(wù)器中幾乎是必然的:

  • 穩(wěn)定是一種假象;

想象一個(gè) C 服務(wù)器,一般不會(huì)重頭碼所有的代碼,會(huì)從一個(gè)開(kāi)源版本開(kāi)始,或者從一些網(wǎng)絡(luò)和線(xiàn)程庫(kù)開(kāi)始,然后不斷改進(jìn)和完善。由于業(yè)務(wù)前期并不復(fù)雜,上線(xiàn)也沒(méi)有發(fā)現(xiàn)問(wèn)題,這時(shí)候可以說(shuō) C 服務(wù)器是穩(wěn)定的嗎?當(dāng)然不是,只是 Bug 沒(méi)有觸發(fā)而已,所有崩潰的 Bug 幾乎都不是本次發(fā)布導(dǎo)致的。野指針和越界是 C 服務(wù)器中最難搞定的狼人,這些狼人還喜歡玩潛伏。

  • 穩(wěn)定是短暫的,不穩(wěn)定是必然和長(zhǎng)期的;

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

  • 最普遍的問(wèn)題還是內(nèi)存問(wèn)題導(dǎo)致崩潰,一般就是野指針和越界;

空指針問(wèn)題相對(duì)很容易查,除零之類(lèi)的典型錯(cuò)誤也容易處理。最完善的解決辦法,就是實(shí)現(xiàn) GC,讓指針總是有效,無(wú)效后再釋放,越界時(shí)能檢測(cè)到,這樣容易解決問(wèn)題;其實(shí) Go 早期的版本就和這個(gè)很類(lèi)似了,要實(shí)現(xiàn)帶 GC 的 C 的同學(xué),可以參考下 Go 的實(shí)現(xiàn)。

  • 線(xiàn)上的 CPU 和內(nèi)存的問(wèn)題,一般不方便使用工具查看,而線(xiàn)上的問(wèn)題有時(shí)候很難在本地重現(xiàn)。

如何能直接獲取線(xiàn)上的 Profile 數(shù)據(jù),需要程序本身支持。比如提供 HTTP API 能獲取到 Profile 數(shù)據(jù),關(guān)鍵是如何采集這些數(shù)據(jù)。

Go 的使命愿景和價(jià)值觀:

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 語(yǔ)言的關(guān)鍵字:

  • 運(yùn)行性能高: Statically typed. Native code generation (compiled). Efficiency. Fast development cycle.
  • 碼農(nóng)不苦逼: Memory safe. Garbage collected. Safety.
  • 云計(jì)算專(zhuān)享: 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 是面向軟件工程的語(yǔ)言,Go 在工程上的思考可以讀?Go at Google: Language Design in the Service of Software Engineering?和?Less is exponentially more。Go 最初是解決 Google 遇到的大規(guī)模系統(tǒng)和計(jì)算的問(wèn)題,這些問(wèn)題如今被稱(chēng)為云計(jì)算,參考?Go, Open Source, Community。

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

Go 開(kāi)發(fā)關(guān)鍵技術(shù)指南 | 為什么你要選擇 GO?(內(nèi)含超全知識(shí)大圖)

2014?云計(jì)算行業(yè)中使用 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 的公司數(shù)目有: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,社區(qū)貢獻(xiàn)的代碼比例。

我們一起看看這些 Go 牛逼的特性,詳細(xì)分析每個(gè)點(diǎn),雖然不能涵蓋所有的點(diǎn),對(duì)于常用的 Go 的特性我們做一次探討和分析。

Milestones

接下來(lái)看一下有關(guān) Go 的重要事件:

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

點(diǎn)擊下載《不一樣的 雙11 技術(shù):阿里巴巴經(jīng)濟(jì)體云原生實(shí)踐》

Go 開(kāi)發(fā)關(guān)鍵技術(shù)指南 | 為什么你要選擇 GO?(內(nèi)含超全知識(shí)大圖)
本書(shū)亮點(diǎn)

  • 雙11 超大規(guī)模 K8s 集群實(shí)踐中,遇到的問(wèn)題及解決方法詳述
  • 云原生化最佳組合:Kubernetes+容器+神龍,實(shí)現(xiàn)核心系統(tǒng) 100% 上云的技術(shù)細(xì)節(jié)
  • 雙 11 Service Mesh 超大規(guī)模落地解決方案

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的技術(shù)圈。”

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)頁(yè)題目:Go開(kāi)發(fā)關(guān)鍵技術(shù)指南|為什么你要選擇GO?(內(nèi)含超全知識(shí)大圖)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://weahome.cn/article/dcopip.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部