在 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中文網其他相關文章!