在 Hacktoberfest 期間與 Mattermost 的人們一起度過了令人難以置信的經歷(也不要忘記他們貼心的禮物!),我決定在 11 月再次與他們一起去。
這次真的是和他們一起“去”,因為他們的服務器是用 Go 編寫的(我為我傷人的幽默感道歉)。在 Hacktoberfest 期間,我開發了他們的行動應用程序,該應用程式是使用 React Native 用 TypeScript 編寫的。不過,我這次遇到的問題與他們的伺服器有關,這是我第一次參與 Go 專案。
去
在完全沒有 Go 知識的情況下,我做出了先學習它的正確決定。幸運的是,Go 非常容易上手。我真的對它的簡單性感到驚訝,同時能夠產生快速可靠的軟體。一個一小時的影片就足以讓我了解基礎知識,而且我發現自己比學習 Rust 時停頓的時間要少得多? .
首先我想花點時間欣賞這隻可愛的傻地鼠:
除此之外,我喜歡 Go 是靜態的強型別。這是我最近與朋友討論的事情:靜態和/或強類型語言只需要在程式碼設計中多考慮一點,但它們可以消除大量的歧義。另外,與 Rust 類似,Go 編譯器可以在可能的情況下推斷類型,這使得額外的想法變得更加微不足道。
有些人稱 Go 為「現代 C」。現在我明白為什麼了:它的性能非常好,並且具有 C 的簡單性。它支援使用指針的低階操作。但與 C 不同的是,它具有您所期望的現代語言的功能,例如介面、切片、映射等。另一個令人著迷的功能是 goroutine,它是處理並行執行的獨特簡單模型。
最重要的問題
事實證明,我真的在學習 Go 上走得太遠了,因為這是一個非常簡單的問題。我所要做的就是在單一文件中實現錯誤處理。
在這個問題中,他們有一個部分方便地提到他們更喜歡返回或記錄錯誤。透過深入了解 Mattermost 的開發人員文檔,我很快就找到了有關錯誤處理的部分。
我遇到的唯一障礙是確定使用哪個日誌等級。儘管文件中提到了它,但我仍然發現定義不明確。然而,在專案內快速搜尋後,我意識到這些函數在其他地方總是使用相同的日誌等級。這消除了我的疑慮。
由於我正在開發的函數提供靜態 HTML 頁面,因此我還確保在發生錯誤時返回正確的 HTTP 錯誤代碼,如下所示:
http.Error(w, err.Error(), http.StatusInternalServerError)
這就是所有的工作!我提交了 PR,最初有點擔心,因為這是我第一次使用 Go,但結果很好。 PR 在進行小修復後就合併了。
結論
總的來說,這是一個有趣且容易解決的問題。我很高興我選擇了它,即使它不像我一直在解決的其他問題那麼具有挑戰性。我總是很高興學習新語言,這是一個完美的藉口!能夠立即使用它真是太棒了。
以上是與 Mattermost 同行!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

goisastrongchoiceforprojectsneedingsimplicity,績效和引發性,butitmaylackinadvancedfeatures and ecosystemmaturity.1)

Go'sinitfunctionandJava'sstaticinitializersbothservetosetupenvironmentsbeforethemainfunction,buttheydifferinexecutionandcontrol.Go'sinitissimpleandautomatic,suitableforbasicsetupsbutcanleadtocomplexityifoverused.Java'sstaticinitializersoffermorecontr

thecommonusecasesfortheinitfunctionoare:1)加載configurationfilesbeforeThemainProgramStarts,2)初始化的globalvariables和3)runningpre-checkSorvalidationsbeforEtheprofforeTheProgrecce.TheInitFunctionIsautefunctionIsautomentycalomationalmatomatimationalycalmatemationalcalledbebeforethemainfuniinfuninfuntuntion

ChannelsarecrucialingoforenablingsafeandefficityCommunicationBetnewengoroutines.theyfacilitateSynChronizationAndManageGoroutIneLifeCycle,EssentialforConcurrentProgramming.ChannelSallSallSallSallSallowSallowsAllowsEnderDendingAndReceivingValues,ActassignalsignalsforsynChronization,and actassignalsynChronization and andsupppor

在Go中,可以通過errors.Wrap和errors.Unwrap方法來包裝錯誤並添加上下文。 1)使用errors包的新功能,可以在錯誤傳播過程中添加上下文信息。 2)通過fmt.Errorf和%w包裝錯誤,幫助定位問題。 3)自定義錯誤類型可以創建更具語義化的錯誤,增強錯誤處理的表達能力。

Gooffersrobustfeaturesforsecurecoding,butdevelopersmustimplementsecuritybestpracticeseffectively.1)UseGo'scryptopackageforsecuredatahandling.2)Manageconcurrencywithsynchronizationprimitivestopreventraceconditions.3)SanitizeexternalinputstoavoidSQLinj

Go的錯誤接口定義為typeerrorinterface{Error()string},允許任何實現Error()方法的類型被視為錯誤。使用步驟如下:1.基本檢查和記錄錯誤,例如iferr!=nil{log.Printf("Anerroroccurred:%v",err)return}。 2.創建自定義錯誤類型以提供更多信息,如typeMyErrorstruct{MsgstringDetailstring}。 3.使用錯誤包裝(自Go1.13起)來添加上下文而不丟失原始錯誤信息,

對效率的Handleerrorsinconcurrentgopragrs,UsechannelstocommunicateErrors,enplionErrorWatchers,Instertimeout,UsebufferedChannels和Provideclearrormessages.1)USEchannelelStopassErtopassErrorsErtopassErrorsErrorsErrorsFromGoroutInestOthemainFunction.2)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器