ホームページ  >  記事  >  バックエンド開発  >  raku インターフェースを備えた Go パイプライン

raku インターフェースを備えた Go パイプライン

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-07 13:52:03185ブラウズ

Go pipelines with Raku interfaces

では、あなたが 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(&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"})

}

ここで行ったことは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。