首頁 > 後端開發 > Golang > 使用 TypeScript 遷移 NestJS 微服務到 Go:一週的發現

使用 TypeScript 遷移 NestJS 微服務到 Go:一週的發現

WBOY
發布: 2024-07-17 21:01:05
原創
773 人瀏覽過

Migrando Microservicios de NestJS con TypeScript a Go: Una Semana de Descubrimientos

使用 TypeScript 遷移 NestJS 微服務到 Go:一週的發現

上週,我沉浸在 Go 的世界中,目的是將我們在 NestJS 中開發的微服務遷移到 TypeScript。這趟旅程是一次激烈的練習,旨在忘記某些範式並採用其他範式,以了解這兩個開發生態系統之間的根本差異。

我們在 NestJS 的架構

在我們的 NestJS 堆疊中,我們管理連接到 PostgreSQL 和 Redis 資料庫的微服務。我們在微服務之間實施各種通訊策略:

  1. 透過事件進行通訊:我們使用 Pub/Sub 進行訂閱和主題,從而允許微服務之間進行非同步通訊。
  2. 前端後端 (BFF):我們實作受 JWT 保護的 REST API,它們充當前端和資料庫之間的中介。

驗證和遷移

DTO 驗證和資料遷移在我們的系統中至關重要。 TypeScript 允許我們使用 Knex 和 TypeORM 定義嚴格的類型和結構來處理遷移。雖然有效,但這種方法需要深入了解該語言以及如何跨不同微服務操作資料流。

NestJS 的挑戰

我們偵測到事件循環影響效能的問題,我們使用 Clinic.js 函式庫解決了這些問題。我們確定了瓶頸並優化了設計模式以及非同步和等待的使用。然而,在 Node.js 中管理並發可能會很複雜,而且會佔用大量資源。

進入Go

在探索 Go 時,我們遇到了範式轉移和一系列顯著差異:

  1. 編譯和靜態類型:與 TypeScript 不同,Go 是一種具有強靜態類型的編譯語言,這迫使我們在編譯時偵測錯誤。
  2. 控制流程與錯誤處理:Go 透過明確關注回傳錯誤而不是異常來簡化錯誤處理。
  3. 資料結構和記憶體:Go 中的記憶體分配和資料結構管理需要對硬體有更深入的了解,這與 JavaScript 更抽象的方法不同。

物件導向程式設計和介面

在 Go 中,雖然支援面向對象,但它的表現有所不同。沒有傳統的繼承和介面的使用提供了獨特的靈活性,必須徹底理解這種靈活性才能充分利用。

比較例

數據驗證

  • NestJS:我們在 DTO 中使用裝飾器進行驗證。

    import { IsString, IsInt } from 'class-validator';
    
    class CreateUserDto {
        @IsString()
        name: string;
    
        @IsInt()
        age: number;
    }
    
    登入後複製
  • Go:我們使用 go-playground/validator 等函式庫進行驗證。

    import (
        "gopkg.in/go-playground/validator.v9"
    )
    
    type User struct {
        Name string `validate:"required"`
        Age  int    `validate:"gte=0"`
    }
    
    validate := validator.New()
    user := &User{Name: "Alice", Age: 25}
    err := validate.Struct(user)
    
    登入後複製

非同步通信

  • NestJS:使用 async/await 處理 Promise。

    async function fetchData(): Promise<void> {
        const data = await apiCall();
        console.log(data);
    }
    
    登入後複製
  • Go:使用 goroutine 和通道實現並發。

    func fetchData() {
        dataChan := make(chan string)
        go func() {
            dataChan <- apiCall()
        }()
        data := <-dataChan
        fmt.Println(data)
    }
    
    登入後複製

工具和設定

在 Go 中,我們採用了 Gin 等工具用於 REST API,以及 Gorm 作為 ORM。在 VSCode 中使用 make 設定環境來自動化任務對於保持生產力和適應這種新的工作流程至關重要。

最後的想法

從帶有 TypeScript 的 NestJS 遷移到 Go 充滿挑戰,但也很有回報。雖然 NestJS 在快速 API 開發方面提供了豐富的經驗,重點是重複使用和抽象,但 Go 為我們提供了對並發和效能的更精細的控制,這對於高度可擴展的應用程式至關重要。

我們繼續試驗和調整我們的工作流程,儘管面臨挑戰,但我們對 Go 為我們微服務的未來提供的可能性感到興奮。


我希望這個部落格能為那些考慮類似轉變的人提供指導和啟發。您在技術遷移方面有哪些經驗?在過程中您發現了哪些挑戰和解決方案?

分享你的故事,讓我們一起繼續學習吧!

以上是使用 TypeScript 遷移 NestJS 微服務到 Go:一週的發現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板