一、簡介
Go 語言又稱 Golang,由 Google 公司于 2009 年發(fā)布,近幾年伴隨著云計算、微服務、分布式的發(fā)展而迅速崛起,躋身主流編程語言之列,和 Java 類似,它是一門靜態(tài)的、強類型的、編譯型編程語言,為并發(fā)而生,所以天生適用于并發(fā)編程(網絡編程)。
目前 Go 語言支持 Windows、Linux 等多個平臺,也可以直接在 Android 和 iOS 等移動端執(zhí)行,從業(yè)務角度來看,Go 語言在云計算、微服務、大數據、區(qū)塊鏈、物聯網、人工智能等領域都有廣泛的應用。所以當下學習正當時。
二、Go 語言的作者
Go語言之父們(從左到右分別是Robert Griesemer、Rob Pike和Ken Thompson)
Ken Thompson C語言 Unix 和 Plan9 的創(chuàng)始人之一,20世紀70年代設計并實現了 Unix 操作系統(tǒng),還和 Rob Pike 設計了UTF-8編碼。
Rob Pike 不但設計了 UTF-8 編碼,還開發(fā)了分布式多用戶操作系統(tǒng) Plan9 Inferno 操作系統(tǒng)和 Limbo 編程語言。
Robert Griesemer 就職于 Google,負責 Chrome 瀏覽器中 Google V8 引擎的代碼。
那天下午,在谷歌山景城總部的那間辦公室里,羅伯·派克啟動了一個 C++ 工程的編譯構建。按照以往的經驗判斷,這次構建大約需要一個小時。利用這段時間,羅伯·派克和羅伯特·格瑞史莫、肯·湯普森坐在一處,交換了關于設計一門新編程語言的想法。
之所以有這種想法,是因為當時的谷歌內部主要使用 C++ 語言構建各種系統(tǒng),但 C++ 的巨大復雜性、編譯構建速度慢以及在編寫服務端程序時對并發(fā)支持的不足,讓三位大佬覺得十分不便,他們就想著設計一門新的語言。在他們的初步構想中,這門新語言應該是能夠給程序員帶來快樂、匹配未來硬件發(fā)展趨勢并適合用來開發(fā)谷歌內部大規(guī)模網絡服務程序的。
他們于2007年開始設計Go語言,于2009年正式對外發(fā)布。Go語言即具備python等動態(tài)語言的開發(fā)速度,又擁有C/C++等編譯型語言的性能與安全性。又被稱作21世紀的C語言,不但能夠訪問底層操作系統(tǒng)還提供了強大的網絡編程和并發(fā)編程,分布式編程。
在 Go 語言項目開源后,Go 語言也迎來了自己的“吉祥物”,是一只由羅伯·派克夫人芮妮·弗倫奇(Renee French)設計的地鼠,從此地鼠(gopher)也就成為了世界各地 Go 程序員的象征,Go 程序員也被昵稱為 Gopher 。
三、Go語言特性
開放源代碼 Go本身就是用Go語言編寫的。
快速 天下武功唯快不破,選擇一門快速的語言例如C語言,卻難以開發(fā),編譯速度依賴性運行時錯誤都非常多,要么有些語言依賴關系太多,最重要的一個就是解釋器本身,例如Java語言需要虛擬機才能運行代碼,javascript和node.js維護起來就是噩夢了。尤其是遇到回調。Go語言一開始設計就考慮到快速編譯。他能像其他解釋性語言一樣,你不會注意他正在編譯。Go語言實現了開發(fā)效率與執(zhí)行效率的完美結合,讓你像寫Python(效率)代碼一樣編寫C語言(性能)代碼。
安全 作為強類型靜態(tài)語言,并自帶垃圾回收機制所以也具有安全性。因為Go的語言設計擁有像C語言那樣操作指針,但是他通常不會像C語言那樣危險,因為他內存是由Go自身進行管理的。
代碼簡潔 Go語言不僅在編譯上快速,而且代碼簡潔明了,易于閱讀。
已編譯 不需要虛擬機支持,可直接編譯成機器代碼,編譯后的文件也不需要依賴其他包文件。
跨平臺 Go語言擁有的交叉編譯,可以輕松編譯到指定的平臺上運行:例如OS X、Linux、Windows、Arm或者其他平臺。
自動垃圾回收 程序在運行過程中的垃圾回收工作一般由Go運行時系統(tǒng)全權負責。不過,Go也允許我們對此項工作進行干預。
內置包 Go語言擁有幾乎所有你能用到的標準庫。例如http網絡協(xié)議包,json解析包,time時間包等等。這種碎片化的東西在一個系統(tǒng)中占用大部分時間。
完整的構建工具 Go語言出色的內置命令工具,它自帶了很多強大的命令和工具,通過它們,可以很輕松地完成Go程序的獲取、編譯、測試、安裝、運行、分析等一系列工作。例如自動設置代碼格式,檢查代碼存在的問題,go fmt命令每次保存后自動格式化代碼。
原生的并發(fā)編程 并發(fā)在Go語言中屬于一大亮點,并發(fā)的最小單元是協(xié)程,是一個微線程卻有別于線程。協(xié)程由Go語言自身創(chuàng)建,并且由Go語言自身的運行時runtime調度。在其他語言中需要通過線程來解決的問題。一臺電腦能夠開啟的線程數量是有限制的。在Go語言中可以很輕松開啟一個協(xié)程來處理,因為協(xié)程很微型,不會占用電腦資源。一臺電腦可以輕松開啟成千上萬個協(xié)程,在這個大數據的時代,能夠處理大流量的數據能力的語言,并且能夠簡單快速開放的語言,非Go語言莫屬了。
四、哪些公司在使用Go語言
Go社區(qū)中至少有100萬名Go程序員。越來越多的公司都擁抱Go語言,最著名的使用Go語言的公司Google,Docker,Dropbox,Heroku,Uber等。國內的比如滴滴,騰訊,阿里,京東商城,愛奇藝,小米,360,美團,驢媽媽旅游網,斗魚直播,探探 等等 都在使用Go語言。包括嗶哩嗶哩的后臺也從java轉向了Go 可見Go語言的受歡迎程度。你能想到的現代云計算基礎設施軟件的大部分流行和可靠的作品,都是用 Go 編寫的,比如:Docker、Kubernetes、Prometheus、Ethereum(以太坊)、Istio、CockroachDB、InfluxDB、Terraform、Etcd、Consul 等等。當然,這個列表還在持續(xù)增加,可見 Go 語言的影響力已經十分強大。
五、GO語言項目
docker:基于lxc的一個虛擬打包工具,能夠實現PAAS平臺的組建。
kubernetes :Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規(guī)模可伸縮、應用容器化管理。在生產環(huán)境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡
區(qū)塊鏈:BTCD 是用go語言實現的完整節(jié)點的比特幣實現
nsq:bitly開源的消息隊列系統(tǒng),性能非常高,目前他們每天處理數十億條的消息
packer:用來生成不同平臺的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
skynet:分布式調度框架
Doozer:分布式同步工具,類似ZooKeeper
Heka:mazila開源的日志處理系統(tǒng)
cbfs:couchbase開源的分布式文件系統(tǒng)
tsuru:開源的PAAS平臺,和SAE實現的功能一模一樣
groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)
god:類似redis的緩存系統(tǒng),但是支持分布式和擴展性文章來源:http://www.zghlxwxcb.cn/news/detail-538337.html
gor:網絡流量抓包和重放工具文章來源地址http://www.zghlxwxcb.cn/news/detail-538337.html
到了這里,關于Go語言基礎知識(一):基礎介紹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!