首頁 後端開發 Golang 根據我使用 Fuego 的經驗,我是如何編寫 Go API 的

根據我使用 Fuego 的經驗,我是如何編寫 Go API 的

Jan 10, 2025 am 08:37 AM

How I write Go APIs in  my experience with Fuego

我使用 Fuego 建立 Go API 的經驗

身為一名擁有多年經驗的 Go 開發人員,我探索了各種 Web 框架。 我的旅程包括標準庫、Gin 和 Fiber。 雖然每個庫都有優點,但我經常發現自己需要更多的結構或花費過多的時間來整合多個庫以進行驗證、序列化和文件記錄。 這就是 Fuego 改變遊戲規則的地方。

最初,Fuego 看起來只是另一個框架。然而,它使用現代 Go 功能(特別是泛型)來直接從程式碼自動產生 OpenAPI 規範,這引起了我的興趣。我決定在一個小型內部專案上測試它,這是我的誠實帳戶。


第一印象

Fuego 的簡單性立即顯而易見。 設定基本伺服器只需幾分鐘:

package main

import "github.com/go-fuego/fuego"

func main() {
    s := fuego.NewServer()
    fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) {
        return "Hello, World!", nil
    })
    s.Run()
}
登入後複製
登入後複製

熟悉程度是驚人的——類似於 Gin,但具有內建的 OpenAPI 支援。


現實世界的例子

「Hello World」範例並未反映現實世界的複雜性。我的應用程式需要 JSON 資料處理、驗證和類型化回應。 其他框架需要自訂 JSON 解碼、錯誤處理和中間件整合。 Fuego 使用類型化路由處理程序大幅簡化了這個過程。

這是一個簡化的路由處理程序:

type UserInput struct {
    Name string `json:"name" validate:"required"`
}

type UserOutput struct {
    Message string `json:"message"`
}

func main() {
    s := fuego.NewServer()
    fuego.Post(s, "/user", handleUser)
    s.Run()
}

func handleUser(c fuego.ContextWithBody[UserInput]) (UserOutput, error) {
    in, err := c.Body()
    if err != nil {
        return UserOutput{}, err
    }
    return UserOutput{Message: "Hello, " + in.Name}, nil
}
登入後複製

主要改善:

  1. 類型化處理程序: fuego.ContextWithBody[UserInput] 自動將 JSON 反序列化為 UserInput 結構。
  2. 驗證: validate:"required" 確保 Name 欄位存在; Fuego 優雅地處理錯誤。
  3. 回應: 回傳 UserOutput 結構會自動將其序列化為 JSON。

這消除了重要的樣板程式碼 - 沒有 json.Unmarshal、外部驗證庫或自訂錯誤處理。


為什麼 Fuego 會脫穎而出

  1. 原生 Go 感覺: 與大量包裹 net/http 的框架不同,Fuego 感覺非常原生。它直接利用 net/http,允許標準中間件和處理程序的無縫整合。我重複使用了現有的身份驗證中間件,沒有出現任何問題。

  2. 自動 OpenAPI 產生: 我以前管理單獨的 YAML 檔案或依賴 OpenAPI 規範的註釋,這是一個乏味且容易出錯的過程。 Fuego 會自動根據路由處理程序類型產生規範,確保文件始終保持最新狀態。

  3. 驗證和錯誤處理:整合驗證(使用go-playground/validator)非常直觀,並且簡化了錯誤處理。無效的 UserInput 結構會導致符合 RFC 標準的結構化錯誤訊息。


資料轉換

為了確保所有傳入的 Name 欄位都是小寫,我利用了 Fuego 的 InTransform 方法:

package main

import "github.com/go-fuego/fuego"

func main() {
    s := fuego.NewServer()
    fuego.Get(s, "/", func(c fuego.ContextNoBody) (string, error) {
        return "Hello, World!", nil
    })
    s.Run()
}
登入後複製
登入後複製

這會在到達路由處理程序之前自動轉換資料。


遇到的挑戰

  1. 較小的生態系統:與 Gin 或 Echo 相比,Fuego 的使用者群較小,導致可用的社群資源較少。然而,事實證明,儲存庫的範例和文件已經足夠了。

  2. 有限的內建中間件:雖然 Fuego 提供了一些中間件,但它並不像一些舊框架那麼廣泛。 net/http 允許使用外部函式庫或自訂中間件的相容性。


結論

Fuego 提供了便利性和靈活性之間令人信服的平衡。 它透過內建驗證、序列化和文件生成加速 API 開發,同時保持 Go 的原則。 使用類型化結構並讓 Fuego 管理其餘部分顯著改善了我的工作流程。

主要優點:

  • 提高生產力:更清晰的程式碼和減少樣板檔案。
  • 自動化文件:始終保持最新的 OpenAPI 規格。
  • 平滑過渡:與現有的net/http處理程序輕鬆整合。

如果您正在尋找一個現代、靈活的 Go 框架,特別是如果您厭倦了手動 OpenAPI 維護,我強烈推薦 Fuego。它簡化了我的開發過程,同時忠於 Go 的極簡主義哲學。 GitHub 儲存庫提供了全面的資訊和有前景的路線圖。我對它的未來充滿熱情,並將繼續在未來的專案中使用它。

以上是根據我使用 Fuego 的經驗,我是如何編寫 Go API 的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang和C:並發與原始速度 Golang和C:並發與原始速度 Apr 21, 2025 am 12:16 AM

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

表演競賽:Golang vs.C 表演競賽:Golang vs.C Apr 16, 2025 am 12:07 AM

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

Golang vs. Python:主要差異和相似之處 Golang vs. Python:主要差異和相似之處 Apr 17, 2025 am 12:15 AM

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

C和Golang:表演至關重要時 C和Golang:表演至關重要時 Apr 13, 2025 am 12:11 AM

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang的影響:速度,效率和簡單性 Golang的影響:速度,效率和簡單性 Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

Golang和C:性能的權衡 Golang和C:性能的權衡 Apr 17, 2025 am 12:18 AM

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。

See all articles