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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Go 之父:聊聊我眼中的 Go 语言和环境

發(fā)布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 之父:聊聊我眼中的 Go 语言和环境 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好,我是煎魚。

之前春節(jié)假期,在家閉關多日??吹搅嗽?2021 年 6 月 Go 語言之父 Rob Pike 在 UNSW Computing(悉尼新南威爾士大學計算機)組織的分享會議,介紹了他對現(xiàn)在 Go 編程語言和環(huán)境的一些看法。

今天煎魚結合大佬的演講《The Go Programming Language and Environment》和一點個人理解給大家分享一波,包含 Go 發(fā)展、生態(tài)、看法等多方面知識。

Go 怎么樣

Rob Pike 表示其實 Go 目前還不能算做主流語言,但是在全世界的影響力和發(fā)展都大大的超出了預期。

像在國內(nèi)的我們,能夠很明顯感知到,Go 在近 3~5 年的用戶群體不斷增大。我早年在 Segmentfault 上發(fā)文章,過了 1~2 周,我的 Go 文章,也還在第一頁的前幾位,發(fā)文的人比較稀少,但現(xiàn)在人非常多了。

大家會發(fā)現(xiàn),Go 并不是那種非常 “有趣” 的語言,在技術上(語言理論、設計)幾乎沒有什么大進步。當然,這也不是 Go 核心團隊的設計目標。

但就是這么一門語言,他主導了大部分 CNCF 中的項目,例如:K8s、Docker 等,特別牛。Go 是云基礎設施的語言,這是怎么發(fā)生的

Go 為什么成功

Go 從一門無人問津的語言,到現(xiàn)在承擔了各云基礎設施的核心,變得很重要,也是一種成功實踐。

Rob Pike 認為成功的因素有如下:

Rob Pike 在 Google 工作時,當時遇到了上述 PPT 截圖中的許多問題,像是:軟件規(guī)模、長期兼容性、應用構建緩慢等許多方面。

核心觀點:一門編程語言的成功取決于其他很多方面,Go 語言是面向軟件開發(fā)的,而不僅僅只是編程。

為此,Go 就是為了解決軟件開發(fā)而生,而非只是編程,這是成功的關鍵因素。

Go 要解決的難題

他們遇到的一個大問題就是 Scale(規(guī)模),規(guī)模又分為了 3 大塊問題。

分別是:

  • 并發(fā)(Concurrency)。

  • 工程(Engineering)。

  • 依賴(Dependencies)。

并發(fā)

在 2007 年,軟件規(guī)模的擴大的情況下,Google 的生產(chǎn)集群出現(xiàn)了多核 CPU。

當時沒有成熟的主流語言可以將多核全部正確使用,導致 Google 即使擁有這些龐大的計算集群,硬件資源的利用率也非常低。

線程模型和庫很神秘,很復雜,很困難。由于環(huán)境的要求,生產(chǎn)代碼中不被允許使用線程,而是啟動多個二進制文件。

工程

Google 在軟件開發(fā)上采取的是 Menorepo 的單倉庫分包的模式,因此會有成千上萬的程序員在同一個代碼庫中工作,每天都有數(shù)不清的變化。

但是當時用的都是 C++、Java 等這類語言,太難自動化和分析,很難帶來工具的幫助。

依賴

軟件規(guī)模下的大量依賴,給 Google 帶來了很大的麻煩。

Java 和 C++的開發(fā)速度很慢,C++ 代碼的每一個字節(jié)都變成了 2000 個字節(jié)。

沒有辦法知道依賴性是否是必要的,感覺是很糟糕的。

Go 初始特性

Go 的大部分核心特性,其實是大佬們在 2007 年 9 月的一個下午,在白板上畫了草圖和討論出的。

如下:

  • 語法、語義。

  • 并發(fā)性。

  • 封裝。

  • 垃圾回收。

  • 工具化。

  • 自動化,包括格式化。

接口化

在日常的 Go 程序(標準庫、第三方庫、應用程序等)中,存在著許多微小的接口,可以讓我們做許多的事情,像是寫入圖片都可以寫入到任意地方。

這種接口化,也就是常說的鴨子類型(duck typing):像鴨子走路,像鴨子叫(長得像鴨子),那么就是鴨子。

構成了 Go 的應用文化。

類型支持

在類型設計上,Go 與其他編程語言有著很根本的一個差異,那就是不能不同類型混合在一起做運算操作:

要跨類型的話,必須做顯示轉(zhuǎn)換,不存在明確的隱式轉(zhuǎn)換。

并發(fā)

Go 要用協(xié)程做并發(fā)、并行等動作,非常方便,不需要幾行代碼。

普通的工程師都能上手:

這是一個很重要的殺手級特性和賣點。

安全性

在設計時,Go 對安全性考慮了許多。一般來講,是沒法做一些不安全的事情,但硬要做,就必須引用 unsafe 的庫:

使用 Go 會比 C/C++ 簡單許多,既安全又省心。如果出現(xiàn)了 unsafe 的引用,就能明確知道這個程序是 “不安全” 的。

完整性

Go 基于前面所提到的接口化,面向網(wǎng)絡、密碼學、文本處理、格式化 IO 等實現(xiàn)了一系列的核心基礎庫:

主體指的是 Go 把常用的都覆蓋全了,非常高效全面。

一致性

跨系統(tǒng)的編譯,只需要稍微調(diào)整 2 個環(huán)境變量,就可以在 A 系統(tǒng)打出 B 系統(tǒng)能運行的二進制文件,并且行為一致,也不用擔心垃圾回收。

Rob Pike 還介紹了自己平時都是在 MacOS 下開發(fā),會經(jīng)常打一個 Linux 的二進制文件部署到服務器上去運行,非常方便。

兼容性

Go 在 2012 年發(fā)布 Go1.0 起,就起草了一份 Go1 兼容性保障的文檔,以此作為對用戶的承諾。將在 Go1 內(nèi)不會出現(xiàn)破壞性修改,你 10 年前的代碼能跑,10 年后也能跑,非常舒服。

從現(xiàn)在來看,也是做到了。

開發(fā)工具

配套的 Go 開發(fā)者工具,是具有標準化的,不像某些語言左一個右一個的,非常混亂。

Go 工具鏈都是 go build、go fmt 等模式。

依賴庫

官方有大量的標準庫提供,用戶可以自定義第三方庫。依賴的管理方式是非集中式的,可以在每個人的 URL(例如:GitHub 等),不存在搶占注冊的風險。

有一點遺憾的是,在早期庫依賴時,理論上但就應該包含模塊的依賴管理。但當時沒有做到,現(xiàn)在有了,也算是 OK 了。

主題

如果希望把 Go 這門語言的生態(tài)系統(tǒng)做起來,就要在社區(qū)中運轉(zhuǎn),能夠讓其他人做出貢獻。

這里最常見的就是 IDE 的各種 Go 插件,以及平時我們正在使用的第三方庫,他人開發(fā)的工具等,都可以拿來就用。

文化

Go 社區(qū)文化的構建,本質(zhì)上 Go 現(xiàn)在作為云原生應用的基礎,構建了現(xiàn)代的云環(huán)境,是由社區(qū)主動發(fā)起的。

共同維護更美好的愿景,一種安全、兼容、可移植性和可讀性的文化。

總結

在設計一門語言時,不單單只是設計他,必須要培養(yǎng)他,把其身邊的生態(tài)系統(tǒng)都做起來,讓他變得繁榮。

像是 Go,快速、高效、可移植性、部署簡單、長期兼容、簡單抽象、好用工具、容易測試、容易自動化、很好用的依賴庫等。這些東西共同構成了他的文化,也會使他做的更好。

Rob Pike 表示:Go 是關于軟件開發(fā)的,而不僅僅是編程,這是 Go 的核心精神和理念。

一些交流

  • 泛型:之所以一開始沒有放進特性里,是因為不知道怎么會對他感到不舒服,不確定性極高。但經(jīng)過 10+ 年的努力,現(xiàn)在已經(jīng)有了一個基本設計和模型,很有可能會打破一切,Rob Pike 也非常好奇后續(xù)的效果。

  • 聲明變量:當前聲明的方式比較多,甚至有想砍掉一些。

  • Channel:認真的嘗試過把 channel 和 network 協(xié)作,但是一直沒有找到好的辦法。

  • GOPATH:Go1.14 以前,會是 GOPATH 的原因,是因為幾個開發(fā)者確實是在 Google 工作,Google 采取的是 Menorepo 的模式,沒有分布式模型的原生態(tài)。

  • 參考

    • The Go Programming Language and Environment

    關注煎魚,獲取業(yè)內(nèi)第一手消息和知識 👇

    你好,我是煎魚,出版過 Go 暢銷書《Go 語言編程之旅》,再到獲得 GOP(Go 領域最有觀點專家)榮譽,點擊藍字查看我的出書之路

    日常分享高質(zhì)量文章,輸出 Go 面試、工作經(jīng)驗、架構設計,加微信拉讀者交流群,和大家交流!

    總結

    以上是生活随笔為你收集整理的Go 之父:聊聊我眼中的 Go 语言和环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。