解密為何 Go 能從眾多語言中脫穎而出

2022-09-21 06:03:11 字數 2681 閱讀 2753

技術的突飛猛進,推動著世界上許多突破性的發現。golang ,作為如此革命性的發明,早已征服了整個世界。

當我們接觸到 golang 後,開發領域中已經發現了很多種(用 golang)帶來進步和革新的方法。在語言的萬馬千軍紛紛爭奇鬥艷時,golang 早已證明了自己才是最大的遊戲規則改變者。

雖然對於初學者來說,這種新生的語言可能有一點點複雜和難以掌握,但是當你做了充足的練習後,你會很容易地處理 golang 語言。

在(開發者)熟識關於 golang 的一些基礎知識之前,他們往往就已經被這種高階程式語言逼瘋了。好了,閒話少說,我們一起來研究下這篇部落格摘錄。

你能相信在過去的幾年中 golang 的受歡迎度像飛火流星一樣如此飆公升嗎?作為一種領先業界的結果導向的程式語言,golang 已風靡全球,事實如此。

雖然幾門其他的語言如 c, j**a 仍在統治程式設計領域,但是一些能為現代計算帶來更好結果的新模型也被引入了,尤其是在雲計算中。

go 之所以越來越受歡迎,主要歸功於的它的輕量,還有它完美適配幾乎所有的微服務架構。容器寵兒 docker 和 google 的 k8s 也使用了 go 。

除了如此不可思議的受歡迎外,go 憑藉它(相對其他語言)有利的特性在資料科學領域也站穩了腳跟,go 的這些功能正是資料科學所需要的,用(這些功能)來(為資料科學)帶來更好的效果。

作為一種高階程式語言,go 可以在多個方面方便開發者,諸如原生的併發,垃圾**機制,等等。使用 go 語言時,開發者不需要再依賴自己減少通過編碼解決記憶體洩露等問題的必要的能力。golang 的一些其他特性,可以恰到好處地適配解決資料科學和微服務架構的問題。

因為前面提到的這些特性,全球越來越多初創公司開始使用 go 語言。go 語言中包含了一套 tensorflow 的 api ,還有一些專案如 pachyderm 是用 go 語言精心打造的。

cloud foundry 中也有一連串的零部件是用 golang 寫的。有趣的是,這份列表定期新增用 go 語言寫的不同(專案)名字。

golang 開始為開發領域帶來進步和緩和一些頑固問題的歷史並不長。在追求為新世紀的開發者們提供乙個統一和無縫體驗的過程中,golang 毫無疑問地已經一步步為自己開創了一片天地。

但是,golang 真的名副其實嗎?golang 真的無可替代?它真的有資格坐頭把交椅?我們一**竟。

極簡是無與倫比的,golang 毫無疑問已經把它發揮到了極致。很多表現很成功的語言像 rust 、scala 等都有很複雜的特性。而且,它們提供了先進的記憶體管理和型別系統,在開發領域表現得很優秀。這些語言也曾像 c# 、c++ ,一時成為主流語言,發揮了它們全部的能量。

golang 走了一條稍微有些不同的路線:合情合理地摒棄了很多此類(上述)特性。下面列出了 go 摒棄的幾個特性和能力。

沒有泛型

泛型和模板是不同程式語言區分於彼此的重要體現。加入與錯誤資訊關聯的複雜的泛型,往往讓語言變得晦澀難懂。go 的設計者們,拋棄了這部分,使得 go 語言變得更簡單。無疑,它雖然有爭議但仍是個明智的設計。

乙個可執行檔案就夠了

golang 中確實沒有與可執行檔案隔離的執行庫。能生成乙個通過複製就可以輕易部署的的二進位制檔案是一項不錯的能力。版本不匹配或依賴問題出現的風險被消除,要感謝 golang 的這個特性。此外,這個特性也是基於容器開發的工程的巨大福音。

沒有動態庫

golang 在 1.8 版本作了微調,現在開發者們可以通過外掛程式包來載入動態庫。但是因為這個特性並不是安裝 go 時自帶的,所以它仍然只是為某些特定的功能而存在的擴充套件。

從乙個非常務實的角度看,go 的協程是最有魅力的幾個方面之一。專家們通過 go 協程可以輕易(在單核機器上)實現出多核機器的能力。

cspc. a. r. 是 golang 併發模型的原型。最初的想法是,規避掉所有的在勞動密集型和容易出錯的多個執行執行緒間共享記憶體的同步問題。

協程同步

另乙個等待協程停止的有效的方法是使用同步組。你可以宣告乙個等待組的物件,隨後在每乙個可以正常呼叫它的 done() 函式的協程在完全停止時把宣告的物件傳給它。

channel

go 協程通過 channel 可以輕鬆地實現互相訪問資訊。你可以建立乙個 channel

變數後把它傳遞給協程。使用者既可以從 channel 接收資料,又可以向 channel 傳送資料。

golang 中處理錯誤的概念是(與其他語言)完全不同的。即使是普通的函式,也能順利地返回乙個錯誤作為它的最終返回值。你即便不能在協程中返回乙個錯誤,也可以通過其他的方式讓錯誤逃逸到協程外的作用域。

把乙個內含資料是 error 型別的 channel 傳給乙個協程無疑是一次很好的實踐。使用者也可以使用 golang 把錯誤寫到資料庫、log 檔案或請求遠端服務。

由於技術的突飛猛進,軟體部署以及交付的概念已經發生了很大的變化。微服務架構在敏捷開發中扮演了乙個關鍵的角色。絕大部分新生的應用是按照雲原生且可以利用雲平台提供的多種雲服務這個思路設計的。

世界上有很多種程式語言,每種語言都有它獨一無二的特性。但是,作為一種完美無瑕的工程語言,golang 的設計方式使其可以滿足新的要求。golang 是為雲而寫的,由於其構建和對並行操作的掌控而獲得了很大的歡迎。

過去的幾年中,go 見證了自己受歡迎度的一路高歌,尤其是在現代資料庫方面。雖然 go 如此風靡一時的很大一部分原因是跟谷歌的支援有關,但它在開發領域中獨一無二的方式才是讓它馳名中外最關鍵的因素。

如果你正在為你的事業尋找 golang web development company[2] ,請從我們這兒僱傭 golang 開發專家作為你的一站式軟體開發夥伴。

GO語言DES加密解密

des是以64位元的明文為乙個單位來進行加密,並生成64位元的密文。由於它每次只能處理特定長度的一塊資料,所以des屬於分組密碼演算法。cypto des包提供了有關des加密的功能。由於分組密碼演算法只能加密固定長度的分組,所以當加密的明文超過分組密碼的長度時,就需要對分組密碼演算法進行迭代,而迭...

深度解密Go語言之unsafe

限制一 go的指標不能進行數 算。來看乙個簡單的例子 a 5p a p p a 3上面的 將不能通過編譯,會報編譯錯誤 invalid operation,也就是說不能對指標做數 算。限制二 不同型別的指標不能相互轉換。例如下面這個簡短的例子 func main 也會報編譯錯誤 cannot use...

深度解密Go語言之map

1 實現map最主要的資料結構有兩種 雜湊查詢表 hashtable 搜尋樹 searchtree go語言的map採用雜湊查詢表實現。2 雜湊查詢表一般會存在 碰撞 的問題。有兩種常用解決辦法 鍊錶法和開放位址法。go語言採用的是鍊錶法。3 自平衡搜尋樹法的最差搜尋效率是 o logn 而雜湊查詢...