首頁  >  文章  >  後端開發  >  使用 Raku 介面的 Go 管道

使用 Raku 介面的 Go 管道

Linda Hamilton
Linda Hamilton原創
2024-11-07 13:52:03185瀏覽

Go pipelines with Raku interfaces

所以,假設您是 golang 開發人員,想要純 Go 寫一些 CICD 任務:

貓任務.go

package main

import "fmt"

func main() {
    fmt.Println("Hello, pipeline")
}

Go 很酷,但是有一件事讓它很難在高級場景中使用 - 它的冗長。將參數傳遞給 go 任務並將它們返回到主場景需要一些努力和大量樣板程式碼。保持主要程式碼簡潔且易於閱讀會很好。

另一方面,當涉及資料輸入和輸出時,Rakulang 是完美的語言,因為它具有極高的靈活性和表現力。

在這篇文章中,我將展示如何在 Sparrow 框架的幫助下將 golang 任務嵌入到 CICD 管道中。


首先,修改我們的golang任務程式碼,新版本將是:

貓任務.go

package main

import (
  "fmt"
  "github.com/melezhik/sparrowgo"
)

func main() {

  type Params struct {
    Message string
  }

  type Result struct {
    Message string
  }

  var params Params

  // sparrowgo takes care about passing 
  // input parameters from Raku to Go
  sparrowgo.Config(&params)

  // read params from pipeline
  fmt.Printf("Task params: %s\n", params.Message)

  // return results back to pipeline 
  sparrowgo.UpdateState(&Results{Message : "Hello from Go"})

}

我們在這裡所做的就是利用 Sparrowgo 套件將 golang 任務「轉換」為 Sparrow 任務,從而具有在 Rakulang 之間傳遞和返回資料的優點。


最後我們的管道會是什麼樣子,現在是 Raku 部分:

#!raku

my $s = task-run ".", %(
  :message<Hello from Raku>
);

say "Result: ", $s<Message>;

高水準設計。

現在,一旦我們有了一些概念驗證程式碼,我們就可以大致了解我們的管道系統的外觀:

      [ Raku scenario to pass and handle data in and out ]
        \                    \                     \          
      task.go -> result -> task.go -> result -> task.go -> ...

因此,我們擁有兩個世界中最好的東西 - Raku 用更少的程式碼編寫場景,而 Golang 則在需要效能和嚴格類型檢查的情況下完成所有繁重的工作。

以上是使用 Raku 介面的 Go 管道的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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