Go語言介紹

Go 即Golang,是Google公司2009年11月正式對外公開的一門編程語言。
Go是靜態強類型語言,是區別於解析型語言的編譯型語言。
解析型語言——源代碼是先翻譯為中間代碼,然后由解析器對代碼進行解釋執行。
編譯型語言——源代碼編譯生成機器語言,然后由機器直接執行機器碼即可執行。
Go語言特性
跨平台的編譯型語言
語法接近C語言
管道(channel),切片(slice),並發(routine)
有垃圾回收的機制
支持面向對象和面向過程的編程模式
Go語言發展(版本/特性)
2009年11月7日 weekly.2009-11-06 —— 早期的版本
2012年3月28日 go1 —— 穩定版版的發布
2013年5月14日 go1.1 —— 語言本身的變化、庫的變化等。
2013年12月01日 go1.2 —— 提供更好的調度和一個新的語言特性。
2014年6月18日 go1.3 —— 主要是在實現的工作上的變化,以及精准的垃圾回收。
2014年12月10日 go1.4 —— 包含了2個很小的語言變更。
2015年8月19日 go1.5 —— 實現的架構變化,同時保留了和舊版本的兼容性。
2016年2月7日 go1.6 —— 語言本身、運行時、和庫的實現的變化。
2016年8月15日 go1.7 —— 標准庫有顯着的性能改進和變化。
2017年2月26日 go1.8 —— 標准庫有顯着的性能改進和變化。
2017年8月24日 go1.9 —— 是包含語言,標准庫,以及運行時的諸多變化。這個版本中的大部分工作都是對運行時和工具的改進。
2018年2月16日 go1.10 —— 大部分更改都在工具鏈,運行時和庫的實現中。
2018年8月24日 go1.11 —— modules和WebAssembly支持。
Go語言應用
誰在用
這個不用多做介紹,作為開發Go語言的公司,當仁不讓。Google基於Go有很多優秀的項目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ 查看更多Google的Go開源項目。
Facebook也在用,為此他們還專門在Github上建立了一個開源組織facebookgo,大家可以通過https://github.com/facebookgo訪問查看facebook開源的項目,比如著名的是平滑升級的grace。
騰訊
騰訊作為國內的大公司,還是敢於嘗試的,尤其是Docker容器化這一塊,他們在15年已經做了docker萬台規模的實踐,具體可以參考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice 。
主要職責是:
負責騰訊游戲藍鯨平台后台開發工作
負責容器相關的開發工作
和藍鯨平台,容器開發有關。騰訊作為主要使用C/C++的公司,使用Go會方便很多,也有很多優勢,不過日積月累的C/C++代碼很難改造,也不敢動,所以新業務會在Go方面嘗試。
百度
目前所知的百度的使用是在運維這邊,是百度運維的一個BFE項目,負責前端流量的接入。他們的負責人在2016年有分享,大家可以看下這個 http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend .
其次就是百度的消息系統,從其最近的Golang招聘介紹就可以看出來.
負責公司手百消息通訊系統服務器端開發及維護
京東
京東雲消息推送系統、雲存儲,以及京東商城等都有使用Go做開發。
小米
小米對Golang的支持,莫過於運維監控系統的開源,也就是 http://open-falcon.com/ 。
此外,小米互娛、小米商城、小米視頻、小米生態鏈等團隊都在使用Golang。
360
360對Golang的使用也不少,一個是開源的日志搜索系統Poseidon,托管在Github上,https://github.com/Qihoo360/poseidon.
還有360的推送團隊也在使用,他們還寫了篇博文在Golang的官方博客上 https://blog.golang.org/qihoo。
360直播在招聘Golang開發工程師。
美團、滴滴、新浪以及七牛等。一般的選擇,都是選擇用於自己公司合適的產品系統來做,比如消息推送的、監控的、容器的等,Golang特別適合做網絡並發的服務,這是他的強項,所以也是被優先用於這些項目。
應用領域
服務開發、並發、分布式、微服務等方向
Go語言項目
docker:基於lxc的一個虛擬打包工具,能夠實現PAAS平台的組建。
kubernetes :Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。在生產環境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡
區塊鏈:BTCD 是用go語言實現的完整節點的比特幣實現
nsq:bitly開源的消息隊列系統,性能非常高,目前他們每天處理數十億條的消息
packer:用來生成不同平台的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
skynet:分布式調度框架
Doozer:分布式同步工具,類似ZooKeeper
Heka:mazila開源的日志處理系統
cbfs:couchbase開源的分布式文件系統
tsuru:開源的PAAS平台,和SAE實現的功能一模一樣
groupcache:memcahe作者寫的用於Google下載系統的緩存系統
god:類似redis的緩存系統,但是支持分布式和擴展性
gor:網絡流量抓包和重放工具
Go語架構
GOPATH的工作區包含bin,src,和pkg這三個:
src——源碼(包含第三方的和自己項目的)
bin——編譯生成的可執行程序
pkg——編譯時生成的對象文件
Go語言發展前景
Go語言將登上語言榜前列,與C和Java並列前三甲
Go語言稱霸雲計算
Go將統治下一個10年
