golang方向,golang有什麼優勢

本文目錄一覽:

為什麼 Go 語言的性能還不如java

Go語言自亮相以來並沒有展示一個明確的方向,Google員工將Go語言稱為一個「試驗性語言」,稱其試圖融合Python等動態語言的開發速度和C或C++等編譯語言的性能和安全。一位Go語言的支持者概括而言Go語言如下:簡單、快速、安全、並發、快樂編程、開源;但Go語言缺乏方向以及其「集大成者」的嘗試很容易會導致其學貓不成學狗也不成,淪為四不像。儘管如此,編者仍然覺得Go語言有相當大的潛力:很多開發者對它感興趣——不僅它的最初設計者陣容強大,而且在參與修改源代碼的人群中也不乏大牛級人物。這很有可能幫助Go語言找到適合自己的方向,開拓系統編程的新方向。

2020年node.js、python、golang、java、c++,rust如何選擇?

什麼方向,選什麼語言。

主流的就c++ Python java

寫底層,要效率的就c++

人工智慧就Python

網路開發就java

小程序就node.js

另外兩個太小眾。。

2022年最值得學習的技術有哪些?

CDA數據分析師 出品

編譯:Mika

如果我們把人類文明想像成汽車的話,那麼軟體開發行業就相當於汽車的引擎,編程語言就像引擎的燃料。

2021年很快就要結束了。如今,軟體開發行業正以前所未有的速度在全球蓬勃發展。在不久的將來,該行業在全球收入預計將超過3000億美元。

在越來越多的行業,擁有數據思維能力,會編程語言也變得日益重要,能夠編寫計算機程序也成為了當下最值得學習的技能之一。

在數字經濟的新形勢下,跟隨技術潮流的發展來學習新技術是十分必要的。2022年,你有計劃新學一門編程語言嗎?

在本文中我們列出了2022年值得學習的編程語言TOP 7,一起來看看吧。

01 Python

確切地說,Python是目前世界上最流行的編程語言,而且熱度一直很高。

統計數據顯示,Python在幾個主要的語言排名指數中一直名列前茅排。這也使其成為開發者的首選語言之一,也是企業使用語言的首要選擇。

無論是安卓或iOS應用開發,還是構建桌面應用,企業如今會僱用專門使用Python的開發人員。這也是意料之中的,因為Python有許多優勢,而且它是一種頂級的通用語言。

Python最大的優勢在於它相對容易學習,而且還加快了開發時間,這也是為什麼企業機構如此喜歡Python的原因。同時對於作為開發人員來說,Python還具有開源的優勢,並且在線社區非常活躍,這意味著你可以隨時得到指導和支持。

正由於Python如此流行,該領域並不缺乏人才,但這並不意味著你不應該學習這種全堆棧語言。這裡要注意一下,Python可能比Kotlin等其他語言速度慢,而且它不是移動設備的原生語言,可能會導致應用程序內存消耗高。

02 Kotlin

學習Kotlin的一大亮點在於,谷歌很喜歡使用該語言。事實上,自2017年以來,Kotlin一直是谷歌的首選軟體開發語言。

谷歌優先考慮基於Kotlin的應用程序的創新特性和功能,開發者只需用這種易於使用的語言編寫代碼,就可以輕鬆地在競爭中保持領先。最重要的是,你可以使用Kotlin作為WordPress編程實踐,構建WP網站或開發android應用程序、伺服器等。而且只要是使用Java的地方,你都可以使用Kotlin,因為它與這種流行的語言是互通的。

還值得注意的是,Kotlin很可靠,其應用程序的源代碼很容易維護,語言本身也很乾凈和緊湊,這使得它相當容易學習。不用說,Kotlin也通過更好的團隊協作和效率大大減少了開發時間。

03 JavaScript

在頂尖的編程語言中,不得不提JavaScript,它已成為桌面軟體、基於web的應用程序甚至手機應用程序的標杆性語言。

你現在可能會想,為了成為一名優秀的的開發者,你需要學習本文中提到的所有語言,事實上你掌握的語言越多,這越有利於你的職業發展。

要知道,如今開發團隊和公司一般都傾向於招募具有多項技能的開發人員,JavaScript能讓你如虎添翼。JavaScript的優勢在於,你幾乎可以用這種語言編寫任何代碼。而且它在電子商務行業中特別流行,用於編寫運輸應用程序以及其他後端以客戶為中心的應用程序。

所有這些都表明,學習JavaScript是一項非常有價值的技能。它的優勢在於速度性、多功能性和可靠性。同時JavaScript流行度很高,由於有巨大的在線社區,這也讓其易於學習。

04 C++

經過多年的發展,C++已經成為一種用於分析和研究目的的編程語言,現在它是遊戲開發的主要語言之一。這是因為C++是世界上最流行的遊戲引擎——虛幻引擎(Unreal Engine)的主要腳本語言。

如果你想在2022年成為遊戲行業一個有競爭力的開發者,不妨學一學C++。該語言對於系統軟體開發,以及將項目管理方法集成到PM應用程序和企業專有軟體中非常有用。同時,C++還支持面向對象編程以及多種其他編程模式,這使C++具有高度的通用性,而且也比其他一些編程語言更容易學習。

在使用C++時,唯一麻煩的是沒有自動垃圾回收器,這意味著你需要手工清除無用數據。內置的friends函數和全局變數可能會帶來一些安全風險,你可以通過管理訪問點來避免這些風險。

05 Golang

Golang最早出現在2009年,但它被認為是一種相當新的語言。近年來,無論是在前端還是後端,Golang都在開發社區掀起了一波浪潮。

Golang是由谷歌推出的,主要目的是將推進函數式編程的發展,它具有許多C語言應有的功能,比如包括垃圾收集器、更好的內存安全性和管理、結構類型等等。

對於要處理敏感信息的的軟體來說,Golang是非常不錯的選擇。例如中小企業的計費軟體以及需要強大工具來管理金融交易和數據的大型企業。不過,Golang學習起來要花費的時間精力更多,但對於有抱負的開發人員來說,如果未來想從事web和應用程序開發,那麼這個語言是很值得學習的。

同時,它還是開源的,因此你有很多機會可以相當快地掌握這種語言。如今的企業和用戶都需要簡單而直觀的應用程序,Golang在代碼效率、簡單性和安全性的優勢就顯得十分重要了。

06 Dart

在谷歌開發的新式編程語言中,Dart作為一種簡單的編碼語言在業界迅速崛起,它遵循C風格的語法。這意味著它相當容易學習,而且它在多平台和跨平台開發中有著廣泛的應用。

作為軟體開發者,你需要一種可以用於為各種平台編寫應用程序的語言。

就拿可穿戴設備來說,如今可穿戴設備在許多方面改變了我們的生活,而且必須與其他設備連接,因此你得確保這些設備在不同平台的應用中的無縫操作。這裡Dart就能派上用場了,你可以Dart為任何電子設備構建應用程序。

學習Dart並不是必須的,但它確實比學習JavaScript這類傳統語言有一些優勢。Dart更容易學習,語法更簡單,尤其是在快速開發和輸出成為常態的時代,這是十分珍貴的特質。

07 Solar 2D

最後,Solar 2D(前身為Corona)是專門為開發手機遊戲而構建的軟體開發工具包。考慮到手機遊戲日益流行的事實,到2022年僅在美國,手機遊戲內容市場的價值就將超過1210億美元。

考慮到這一點,Solar 2D正是移動遊戲行業中必不可少的編程工具包。Solar 2D目前只是基於2D,但這並不是問題,因為在安卓和iOS遊戲中2D應用程序的表現也十分亮眼。Solar 2D的偉大之處在於它使用了強大的Lua腳本語言,並在魔獸、憤怒的小鳥和文明等遊戲中廣為使用。

Golang 新手該怎麼提升能力

新手入門技巧:

1.升級你的角色等級

Pokemon GO 遊戲如果你的目標不是只有 「收集所有神奇寶貝” 的話,而是想用心玩這款遊戲,那角色等級絕對是最重要的一環,甚至比抓到稀有神奇寶貝還重要。

等級高,你才能解鎖與獲得更多道具,如:更強的寶貝球、讓你更好抓神奇寶貝的 Razz Berry、經驗值兩倍的 Lucky Egg、吸引野生神奇寶貝的 Incense 等等。

等級高,你才能抓到 CP (戰鬥力)更強的神奇寶貝。

等級越高,你才能提升更多神奇寶貝的能力(CP 與 HP)。

升級到 5 級才能進到 GYM 里跟其他玩家戰鬥。

2.不要擔心寶貝球不夠

寶貝球是一個非常容易取得的道具,幾乎每一個 PokeStop 都能獲得兩個以上,等你玩久之後一定會嫌寶貝球數量太多(背包預設只能裝 350 個道具),把它丟掉會變成非常平常的事,所以抓神奇寶貝時不用害怕丟歪失手,盡情的試手感與角度吧!不過還是要注意次數,小心神奇寶貝會烙跑走。

3.抓光每一個你所看到的神奇寶貝

跟一開始一樣,如果你的目標不是只有 「收集所有神奇寶貝”,那隻要是地圖中出現的神奇寶貝,就全部都抓光吧!每抓一隻都能獲得經驗值、STARDUST 與 CANDY,而這些都是遊戲中非常重要的元素。

4.先不要提升與進化你的神奇寶貝

剛開始玩時角色等級還太低,因此抓的神奇寶貝 CP 戰鬥力都會很低,幾乎只有 100 以下,所以千萬不要急著提升或進化神奇寶貝,把 STARDUST 與 CANDY 保留下來,等到等級變高開始抓到 CP 200、甚至是 300 以上再決定也不遲,而且你還有機會抓到已經進化過的神奇寶貝。

5.只保留 CP 高與能力強的神奇寶貝(僅限初期)

CP 值(戰鬥力)越高,基本上也代表神奇寶貝越強,因此當你抓到相同的神奇寶貝時,如果 CP 值差 30 以上,就不要猶豫把它 TRANSFER 換成 CANDY 吧!這樣也不佔空間。而等到後期開始專心養育神奇寶貝時,可以參考這篇文章,把素質最好的神奇寶貝找出來。

資訊頁面下方可看到它的攻擊能力,每一位神奇寶貝都有兩種,上面是普通攻擊、下面為絕招,目前還沒有數據表示哪種能力比較強,就筆者經驗來說,數字越高也代表攻擊力越強,因此如果是 CP 很接近的神奇寶貝,就從這邊比較,保留攻擊力強的那隻就對了!

6.慎選使用 Incense 與 Lucky Egg 的時機

當等級升到 5 級以及 7 級時,你會各獲得一個 Incense 道具(30 分鐘內吸引更多的野生神奇寶貝),筆者會建議先使用一個就好,另一個等到 9 級獲得 Lucky Egg(30 分鐘內可兩倍經驗值) 時再用,效果會更好。

Lucky Egg 與 Incense 同時使用的效果非常不錯,30 分鐘內你一定會抓到非常多神奇寶貝,而每抓一個可獲得 100XP,經驗值兩倍之後變 200XP,如果是新的神奇寶貝再加 500XP,兩倍之後變 1000XP,30 分鐘過後你的經驗值絕對是用暴增,連升兩級都有可能,所以說不要急的把 Lucky Egg 或 Incense 用掉,等到兩個都擁有時再用效果是最大的!

7.Pokestops 的更新速度很快

Pokestops 是用來提供玩家道具的物件,因此更新速度非常快,當你翻轉過一次變成紫色後,只要等個 1~2 分鐘 5 分鐘就會再變回藍色,因此如果你缺道具又懶得一直走的話,就找一個翻得到 2~3 Pokestops 的位置待著,不到一小時你絕對能獲得非常多道具。(經實測確定是 5 分鐘,之前筆者邊寫文章邊測才會感覺更新超快的錯覺)

如果你住的地方就能翻到 Pokestops,那真的非常幸運,不僅有無限道具可以取得,待在家也能賺 XP 經驗值,不用走來走去。(每翻一次可獲得 50XP)。

8.捕捉 Pokemon 神奇寶貝時需不需要停下來?

這點筆者相信很多玩家都很好奇,答案是:不用!

只要是進入抓 Pokemon 神奇寶貝的畫面後,即便你離碰到的位置超過 1 公里(誇飾法),都能正常捕捉,唯一要注意是如果你有開啟 AR,那就手機畫面就必須保持碰到神奇寶貝的方向才能看到它,沒開啟 AR 的玩家則怎麼移動都沒關係。

不過安全第一,筆者還是建議抓神奇寶貝時停下來,才不會發生任何意外,除非你目前正在搭車。

9.不用太擔心 Pokemon GO 是不是很耗網路流量

繼 T-Moblie 之後,香港 CSL Mobile 也表示會推出 Pokemon GO 無限網路流量服務,因此很多玩家都誤認為 Pokemon GO 非常耗網路流量,事實上你不用太擔心!

根據筆者玩兩周的經驗,角色等級已升級到 14,收集上百隻神奇寶貝,平時在外也正常使用 F

「測試開發全棧化-Go」(1) Go語言基本了解

作為一個測試,作為一個測試開發, 全棧化+管理 是我們未來的發展方向。已經掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。

Go 是一個開源的編程語言 ,它能讓構造簡單、可靠且高效的軟體變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社區。這三個人都是計算機界的大神,有的參與了C語言的編寫,有的還是數學大神,有的還獲得了計算機最高榮譽-圖靈獎。

接下來說說 Go語言的特色 :

簡潔、快速、安全

並行、有趣、開源

內存管理、數組安全、編譯迅速

Go語言的用途 :

Go 語言被設計成一門應用於搭載 Web 伺服器,存儲集群或類似用途的巨型中央伺服器的系統編程語言。

對於高性能分散式系統領域而言,Go 語言無疑比大多數其它語言有著更高的開發效率。它提供了海量並行的支持,這對於 遊戲 服務端的開發而言是再好不過了。

Go語言的環境安裝:

建議直接打開 官方地址因為牆的原因打不開

因為我用的是windows系統,這裡主要講下Windows系統上使用Go語言來編程。

Windows 下可以使用 .msi 後綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。

默認情況下 .msi 文件會安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環境變數中。添加後你需要重啟命令窗口才能生效。個人建議還是安裝到 Program Files文件夾中。

使用什麼開發工具來對Go語言進行編寫:

個人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學習,肯定已經下載了VS code. 那麼這時你需要在VS code中下載Go語言的擴展插件。

這裡有一個巨大的坑,就是在下載Go的插件和依賴包時,會提示一些包沒有。主要是因為下載的依賴包部分被牆了,只能想別的辦法去下載。

建議參考網頁:

解決vscode中golang插件安裝失敗方法

在學習go的過程中,使用的是vscode,但是一直提示安裝相關插件失敗,然後上網查方法,基本上是叫你建立golang.org目錄什麼的,結果全是錯的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然後找到了解決方法,這裡向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對你有所幫助,也可以點開原博主鏈接參考:

Go有一個全球模塊代理,設置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個藍色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然後輸入powershell,搜索出來就可以了。

$env:GO111MODULE=「on」

$env:GOPROXY=「」

go env -w GOPROXY=

go env -w GOPRIVATE=*.corp.example.com

然後我們打開VsCode界面,下面會提示安裝插件,我們選擇Install ALL,就會安裝成功

當你在運行Go語言程序時,提示所有的插件包都已經安裝成功了時,就可以正常使用了,要不然一堆報錯會讓你非常心煩。

好了,今天先到這裡,晚安、下班~

從PHP 到Golang 的筆記 ( 轉 )

———文章來源 YamiOdymel/PHP-to-Golang

PHP和模塊之間的關係令人感到煩躁,假設你要讀取 yaml 檔案,你需要有一個 yaml 的模塊,為此,你還需要將其編譯然後將編譯後的模塊擺放至指定位置,之後換了一台伺服器你還要重新編譯,這點到現在還是沒有改善;順帶一提之後出了PHP 7效能確實提升了許多(比Python 3快了些),但PHP仍令我感到臃腫,我覺得是時候

(轉行)了。

PHP 和Golang 的效能我想毋庸置疑是後者比較快(而且是以倍數來算),也許有的人會認為兩種不應該被放在一起比較,但Golang 本身就是偏向Web 開發的,所以這也是為什麼我考慮轉用Golang 的原因,起初我的考慮有幾個:Node.js 和Rust 還有最終被選定的Golang;先談談Node.js 吧。

Node.js的效能可以說是快上PHP 3.5倍至6倍左右 ,而且撰寫的語言還是JavaScript,蒸蚌,如此一來就不需要學習新語言了!搭配Babel更可以說是萬能,不過那跟「跳跳虎」一樣的Async邏輯還有那恐怖的Callback Hell,有人認為前者是種優點,這點我不否認,但是對學習PHP的我來說太過於”Mind Fuck”,至於後者的Callback Hell雖然有Promise,但是那又是另一個「Then Hell」的故事了。相較於Golang之下,Node.js似乎就沒有那麼吸引我了。你確實可以用Node.js寫出很多東西,不過那V8引擎的效能仍然有限,而且要學習新的事物,不就應該是「全新」的嗎;)?

題外話: 為什麼Node.js不適合大型和商業專案?

在拋棄改用Node.js 之後我曾經花了一天的時間嘗試Rust 和Iron 框架,嗯⋯⋯Rust 太強大了,強大到讓我覺得Rust 不應該用在這裡,這想法也許很蠢,但Rust 讓我覺得適合更應該拿來用在系統或者是部分底層的地方,而不應該是網路服務。

Golang是我最終的選擇,主要在於我花了一天的時間來研究的時候意外地發現Golang夭壽簡潔( 關鍵字只有25個 ),相較之下Rust太過於「強大」令我怯步;而且Golang帶有許多工具,例如 go fmt 會自動幫你整理程式碼、 go doc 會自動幫你生產文件、 go test 可以自動單元測試並生產覆蓋率報表、也有 go get 套件管理工具(雖然沒有版本功能),不過都很實用,而且也不需要加上分號( ; ),真要說不好的地方⋯⋯大概就是強迫你花括弧不能換行放吧(沒錯,我就是花括弧會換行放的人)。

當我在撰寫這份文件的時候 我會先假設你有一定的基礎 ,你可以先閱讀下列的手冊,他們都很不錯。

你能夠在PHP 裡面想建立一個變數的時候就直接建立,夭壽贊,是嗎?

蒸蚌!那麼Golang 呢?在Golang 中變數分為幾類:「新定義」、「預先定義」、「自動新定義」、「覆蓋」。讓我們來看看範例:

在PHP中你會很常用到 echo 來顯示文字,像這樣。

然而在Golang中你會需要 fmt 套件,關於「什麼是套件」的說明你可以在文章下述了解。

這很簡單,而且兩個語言的用法相差甚少,下面這是PHP:

只是Golang 稍微聒噪了一點,你必須在函式後面宣告他最後會回傳什麼資料型別。

在PHP 中你要回傳多個資料你就會用上陣列,然後將資料放入陣列裡面,像這樣。

然而在Golang 中你可以不必用到一個陣列,函式可以一次回傳多個值:

兩個語言的撰寫方式不盡相同。

主要是PHP 的陣列能做太多事情了,所以在PHP 裡面要儲存什麼用陣列就好了。

在Golang里⋯⋯沒有這麼萬能的東西,首先要先了解Golang中有這些型態: array , slice , map , interface ,

你他媽的我到底看了三洨,首先你要知道Golang是個強型別語言,意思是你的陣列中 只能有一種型態 ,什麼意思?當你決定這個陣列是用來擺放字串資料的時候,你就只能在裡面放字串。沒有數值、沒有布林值,就像你沒有女朋友一樣。

先撇開PHP 的「萬能陣列」不管,Golang 中的陣列既單純卻又十分腦殘,在定義一個陣列的時候,你必須給他一個長度還有其內容存放的資料型態,你的陣列內容不一定要填滿其長度,但是你的陣列內容不能超過你當初定義的長度。

切片⋯⋯這聽起來也許很奇怪,但是你確實可以「切」他,讓我們先談談「切片」比起「陣列」要好在哪裡:「你不用定義其最大長度,而且你可以直接賦予值」,沒了。

我們剛才有提到你可以「切」他,記得嗎?這有點像是PHP中的 array_slice() ,但是Golang直接讓Slice「內建」了這個用法,其用法是: slice[開始:結束] 。

在PHP中倒是沒有那麼方便,在下列PHP範例中你需要不斷地使用 array_slice() 。

你可以把「映照」看成是一個有鍵名和鍵值的陣列,但是記住:「你需要事先定義其鍵名、鍵值的資料型態」,這仍限制你沒辦法在映照中存放多種不同型態的資料。

在Golang里可就沒這麼簡單了,你需要先用 make() 宣告 map 。

也許你不喜歡「介面」這個詞,但用「介面」我怕會誤導大眾,所以,是的,接下來我會繼續稱其為「介面」。還記得你可以在PHP 的關聯陣列裡面存放任何型態的資料嗎,像下面這樣?

現在你有福了!正因為Golang中的 interface{} 可以接受任何內容,所以你可以把它拿來存放任何型態的資料。

有時候你也許會有個不定值的變數,在PHP 里你可以直接將一個變數定義成字串、數值、空值、就像你那變心的女友一樣隨時都在變。

在Golang中你必須給予變數一個指定的資料型別,不過還記得剛才提到的:「Golang中有個 interface{} 能夠 存放任何事物 」嗎( 雖然也不是真的任何事物啦⋯⋯ )?

當我們程式中不需要繼續使用到某個資源或是發生錯誤的時候,我們索性會將其關閉或是拋棄來節省資源開銷,例如PHP 里的讀取檔案:

在Golang中,你可以使用 defer 來在函式結束的時候自動執行某些程式(其執行方向為反向)。所以你就不需要在函式最後面結束最前面的資源。

defer 可以被稱為「推遲執行」,實際上就是在函式結束後會「反序」執行的東西,例如你按照了這樣的順序定義 defer : A-B-C-D ,那麼執行的順序其實會是 D-C-B-A ,這用在程式結束時還蠻有用的,讓我們看看Golang如何改善上述範例。

這東西很邪惡,不是嗎?又不是在寫BASIC,不過也許有時候你會在PHP 用上呢。但是拜託,不要。

Golang中僅有 for 一種迴圈但卻能夠達成 foreach 、 while 、 for 多種用法。普通 for 迴圈寫法在兩個語言中都十分相近。

在Golang請記得:如果你的 i 先前並不存在,那麼你就需要定義它,所以下面這個範例你會看見 i := 0 。

在PHP里, foreach() 能夠直接給你值和鍵名,用起來十分簡單。

Golang裡面雖然僅有 for() 但卻可以使用 range 達成和PHP一樣的 foreach 方式。

一個 while(條件) 迴圈在PHP裡面可以不斷地執行區塊中的程式,直到 條件 為 false 為止。

在Golang里也有相同的做法,但仍是透過 for 迴圈,請注意這個 for 迴圈並沒有任何的分號( ; ),而且一個沒有條件的 for 迴圈會一直被執行。

PHP中有 do .. while() 迴圈可以先做區塊中的動作。

在Golang中則沒有相關函式,但是你可以透過一個無止盡的 for 迴圈加上條件式來讓他結束迴圈。

要是你真的希望完全符合像是PHP那樣的設計方式,或者你可以在Golang中使用很邪惡的 goto 。

在PHP中我們可以透過 date() 像這樣取得目前的日期。

在Golang就稍微有趣點了,因為Golang中並不是以 Y-m-d 這種格式做為定義,而是 1 、 2 、 3 ,這令你需要去翻閱文件,才能夠知道 1 的定義是代表什麼。

俗話說:「爆炸就是藝術」,可愛的PHP用詞真的很大膽,像是: explode() (爆炸)、 die() (死掉),回歸正傳,如果你想在PHP裡面將字串切割成陣列,你可以這麼做。

簡單的就讓一個字串給「爆炸」了,那麼Golang 呢?

對了,記得引用 strings 套件。

這真的是很常用到的功能,就像物件一樣有著鍵名和鍵值,在PHP 裡面你很簡單的就能靠陣列(Array)辦到。

真是太棒了,那麼Golang呢?用 map 是差不多啦。如果有必要的話,你可以稍微複習一下先前提到的「多資料儲存型態-Stores」。

你很常會在PHP裡面用 isset() 檢查一個索引是否存在,不是嗎?

在Golang裡面很簡單的能夠這樣辦到(僅適用於 map )。

指針(有時也做參照)是一個像是「變數別名」的方法,這種方法讓你不用整天覆蓋舊的變數,讓我們假設 A = 1; B = A; 這個時候 B 會複製一份 A 且兩者不相干,倘若你希望修改 B 的時候實際上也會修改到 A 的值,就會需要指針。

指針比起複制一個變數,他會建立一個指向到某個變數的記憶體位置,這也就是為什麼你改變指針,實際上是在改變某個變數。

在Golang你需要用上 * 還有 符號。

有些時候你會回傳一個陣列,這個陣列裡面可能有資料還有錯誤代號,而你會用條件式判斷錯誤代號是否非空值。

在Golang中函式可以一次回傳多個值。為此,你不需要真的回傳一個陣列,不過要注意的是你將會回傳一個屬於 error 資料型態的錯誤,所以你需要引用 errors 套件來幫助你做這件事。

該注意的是Golang沒有 try .. catch ,因為 Golang推薦這種錯誤處理方式 ,你應該在每一次執行可能會發生錯誤的程式時就處理錯誤,而非後來用 try 到處包覆你的程式。

在 if 條件式里宣告變數會讓你只能在 if 內部使用這個變數,而不會污染到全域範圍。

也許你在PHP中更常用的會是 try .. catch ,在大型商業邏輯時經常看見如此地用法,實際上這種用法令人感到聒噪(因為你會需要一堆 try 區塊):

Golang中並沒有 try .. catch ,實際上Golang也 不鼓勵這種行為 (Golang推薦逐一處理錯誤的方式),倘若你真想辦倒像是捕捉異常這樣的方式,你確實可以使用Golang中另類處理錯誤的方式(可以的話盡量避免使用這種方式): panic() , recover() , defer 。

你可以把 panic() 當作是 throw (丟出錯誤),而這跟PHP的 exit() 有87%像,一但你執行了 panic() 你的程式就會宣告而終,但是別擔心,因為程式結束的時候會呼叫 defer ,所以我們接下來要在 defer 停止 panic() 。

關於 defer 上述已經有提到了,他是一個反向執行的宣告,會在函式結束後被執行,當你呼叫了 panic() 結束程式的時候,也就會開始執行 defer ,所以我們要在 defer 內使用 recover() 讓程式不再繼續進行結束動作,這就像是捕捉異常。

recover() 可以看作 catch (捕捉),我們要在 defer 裡面用 recover() 解決 panic() ,如此一來程式就會回歸正常而不會被結束。

還記得在PHP里要引用一堆檔案的日子嗎?到處可見的 require() 或是 include() ?到了Golang這些都不見了,取而代之的是「套件(Package)」。現在讓我們來用PHP解釋一下。

這看起來很正常對吧?但假設你有一堆檔案,這馬上就成了 Include Hell ,讓我們看看Golang怎麼透過「套件」解決這個問題。

「 蛤???殺小??? 」你可能如此地說道。是的, main.go 中除了引用 fmt 套件( 為了要輸出結果用的套件 )之外完全沒有引用到 a.go 。

「 蛤???殺小?????? 」你彷彿回到了幾秒鐘前的自己。

既然沒有引用其他檔案,為什麼 main.go 可以輸出 foo 呢?注意到了嗎, 兩者都是屬於 main 套件 ,因此 他們共享同一個區域 ,所以接下來要介紹的是什麼叫做「套件」。

套件是每一個 .go 檔案都必須聲明在Golang原始碼中最開端的東西,像下面這樣:

這意味著目前的檔案是屬於 main 套件( 你也可以依照你的喜好命名 ),那麼要如何讓同個套件之間的函式溝通呢?

接著是Golang;注意!你不需要引用任何檔案,因為下列兩個檔案同屬一個套件。

一個由「套件」所掌握的世界,比起PHP的 include() 和 require() 還要好太多了,對嗎?

在Golang 中沒有引用單獨檔案的方式,你必須匯入一整個套件,而且你要記住:「一定你匯入了,你就一定要使用它」,像下面這樣。

假如你不希望使用你匯入的套件,你只是為了要觸發那個套件的 main() 函式而引用的話⋯⋯,那麼你可以在前面加上一個底線( _ )。

如果你的套件出現了名稱衝突,你可以在套件來源前面給他一個新的名稱。

現在你知道可以匯入套件了,那麼什麼是「匯出」?同個套件內的函式還有共享變數確實可以直接用,但那 並不表示可以給其他套件使用 ,其方法取決於 函式/變數的「開頭大小寫」 。

是的。 Golang依照一個函式/變數的開頭大小寫決定這個東西是否可供「匯出」 。

這用在區別函式的時候格外有用,因為小寫開頭的任何事物都是不供匯出的,反之,大寫開頭的任何事物都是用來匯出供其他套件使用的。

一開始可能會覺得這是什麼奇異的規定,但寫久之後,你就能發現比起JavaScript和Python以「底線為開頭的命名方式」還要來得更好;比起成天宣告 public 、 private 、 protected 還要來得更快。

在Golang 中沒有類別,但有所謂的「建構體(Struct)」和「介面(Interface)」,這就能夠滿足幾乎所有的需求了,這也是為什麼我認為Golang 很簡潔卻又很強大的原因。

讓我們先用PHP 建立一個類別,然後看看Golang 怎麼解決這個問題。

雖然Golang沒有類別,但是「建構體(Struct)」就十分地堪用了,首先你要知道在Golang中「類別」的成員還有方法都是在「類別」外面所定義的,這跟PHP在類別內定義的方式有所不同,在Golang中還有一點,那就是他們沒有 public 、 private 、 protected 的種類。

在PHP中,當有一個類別被 new 的時候會自動執行該類別內的建構子( __construct() ),通常你會用這個來初始化一些類別內部的值。

但是在Golang 里因為沒有類別,也就沒有建構子,不巧的是建構體本身也不帶有建構子的特性,這個時候你只能自己在外部建立一個建構用函式。

讓我們假設你有兩個類別,你會把其中一個類別傳入到另一個類別裡面使用,廢話不多說!先上個PHP 範例(為了簡短篇幅我省去了換行)。

在Golang中你也有相同的用法,但是請記得:「 任何東西都是在「類別」外完成建構的 」。

在PHP 中沒有相關的範例,這部分會以剛才「嵌入」章節中的Golang 範例作為解說對象。

你可以看見Golang在進行 Foo 嵌入 Bar 的時候,會自動將 Foo 的成員暴露在 Bar 底下,那麼假設「雙方之間有相同的成員名稱」呢?

這個時候被嵌入的成員就會被「遮蔽」,下面是個實際範例,還有你如何解決遮蔽問題:

雖然都是呼叫同一個函式,但是這個函式可以針對不同的資料來源做出不同的舉動,這就是多形。你也能夠把這看作是:「訊息的意義由接收者定義,而不是傳送者」。

目前PHP 中沒有真正的「多形」,不過你仍可以做出同樣的東西。

嗯⋯⋯那麼Golang呢?實際上更簡單而且更有條理了,在Golang中有 interface 可以幫忙完成這個工作。

如果你對Interface還不熟悉,可以試著查看「 解釋Golang中的Interface到底是什麼 」文章。

謝謝你看到這裡,可惜這篇文章卻沒有說出Golang 最重要的賣點:「Goroutine」和「Channel」

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200802.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:28
下一篇 2024-12-06 11:28

相關推薦

  • Python實現畫筆方向改變

    本文將介紹如何在Python中實現畫筆方向改變,讓畫筆以中心為軸旋轉。 一、Tkinter庫概述 Tkinter是Python自帶的GUI庫,可用於創建各種GUI應用程序。在Pyt…

    編程 2025-04-29
  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 程序化建模的優勢和劣勢

    程序化建模是指通過計算機編製程序實現對各種複雜系統的建模和模擬過程。隨著計算機技術和計算能力的不斷提高,程序化建模在眾多領域得到了廣泛應用,例如計算機輔助設計、製造、模擬、數據分析…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python在線編輯器的優勢與實現方式

    Python在線編輯器是Python語言愛好者的重要工具之一,它可以讓用戶方便快捷的在線編碼、調試和分享代碼,無需在本地安裝Python環境。本文將從多個方面對Python在線編輯…

    編程 2025-04-28
  • 開源Python CMS的優勢和應用範圍

    開源Python CMS是一種基於Python架構的內容管理系統。它不僅具有高效可靠的核心框架,還有大量的插件和現成的模板,可以充分滿足各種網站需求,使開發人員輕鬆地進行網站設計和…

    編程 2025-04-28
  • HTML5 和 HTML4 區別和優勢

    一、HTML5 與 HTML4 的簡介 HTML4 於 1997 年發布,成為了互聯網頁面設計的工業標準。而 HTML5 於 2014 年正式發布,具有更多強大的功能和改進,在互聯…

    編程 2025-04-24
  • Golang中使用strings.Split函數進行字元串分割的方法

    一、Split函數的基本用法 字元串是編程中常見的數據類型,它們可以在程序中被處理、存儲和傳輸。在Go語言中,字元串也是一個基本的數據類型,而strings包提供了一些操作字元串的…

    編程 2025-04-23
  • Golang環境變數全面解析

    Golang是一門非常流行的開發語言,擁有高效的CGO、簡單易懂的語法、高並發能力等優點,然而它也需要使用環境變數來配置一些參數。在本篇文章中,我們將從多個方面對Golang環境變…

    編程 2025-04-23

發表回復

登錄後才能評論