所以,假設您是 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(¶ms) // 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中文網其他相關文章!