では、あなたが Golang 開発者で、純粋な Go で CICD タスクを作成したいとします。
cat task.go
package main import "fmt" func main() { fmt.Println("Hello, pipeline") }
Go はクールですが、高レベルのシナリオでの使用を困難にしている点が 1 つあります。それはその冗長さです。 go タスクにパラメーターを渡してメイン シナリオに戻すには、ある程度の労力と多くの定型コードが必要です。メインコードは簡潔で読みやすいものにしておくと良いでしょう。
一方、Rakulang は、非常に高い柔軟性と表現力を備えているため、データの出入りに関しては完璧な言語です。
この投稿では、Sparrow フレームワークを少し活用して、Golang タスクを CICD パイプラインに埋め込む方法を説明します。
まず、golang タスク コードを変更しましょう。新しいバージョンは次のようになります。
cat task.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"}) }
ここで行ったことは、Golang タスクを Sparrow タスクに「変換」する Sparrowgo パッケージを利用したことだけであり、Rakulang との間でデータの受け渡しを行うという利点があります。
最後にパイプラインは次のようになります。今度は楽の部分です:
#!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 -> ...
つまり、2 つの世界の長所を利用できます。Raku は少ないコードでシナリオを記述し、Golang はパフォーマンスと厳密な型チェックが必要なすべての重労働を実行します。
以上がraku インターフェースを備えた Go パイプラインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。