ホームページ > バックエンド開発 > Golang > cuelangを使用して、Golangモジュールから生成されたヒントパターンの構造体フィールドに条件を付ける方法

cuelangを使用して、Golangモジュールから生成されたヒントパターンの構造体フィールドに条件を付ける方法

王林
リリース: 2024-02-09 19:57:10
転載
999 人が閲覧しました

cuelangを使用して、Golangモジュールから生成されたヒントパターンの構造体フィールドに条件を付ける方法

php editor Strawberry は今日、cuelang を使用して、Golang モジュールから生成されたプロンプト パターンの構造フィールドに条件を設定する方法を紹介します。 cuelang は、Golang とシームレスに統合される、データ構造を定義および検証するための強力な言語です。 Golang によって生成されたモジュールを使用する場合、構造体フィールドに条件を追加する必要がある状況によく遭遇します。この記事では、cuelang を使用してこの要件を達成する方法を詳細に説明し、誰もが cuelang の強力な機能をよりよく理解し、適用できるようにします。次に、この問題を段階的に分析し、誰もがよりよく理解できるように関連するサンプル コードを提供します。見てみましょう!

質問内容

Golangモジュールから生成されるプロンプトパターンの特定の構造フィールドに追加の制約を設けたいと考えています。

次の schema.cue は、対応する Golang モジュールから生成されます

リーリー

ソース Golang モジュール (以下の例) でヒント アノテーションを指定しようとしましたが、生成された schema.cue に正しい制約が生成されませんでした。

リーリー

私が試みたもう 1 つのアプローチは、接続詞を使用してスキーマのインスタンスを拡張することでした。

CB79515A7EDA1BA1F8290B9FA56F2A98

ただし、cue vet schema.cue test/badVersionValue.yaml では、stdout (badVersionValue.yaml には が含まれます) に対してエラーは生成されませんでした。バージョン: badstring

次の手動で記述した schema.cue

で有効な解決策を得ることができました。 リーリー

このように、cue vet schema.cuetests/badVersionValue.yaml が生成されます

リーリー

このアプローチの欠点は、Golang ソース コード/信頼できる情報源から生成されたファイルを使用して反復するのではなく、ヒント パターン ファイルを最初から作成することになることです。

解決策

定義に関して、レビュー用のプロンプトを適切に使用する方法を誤解していました。

cuetorials.com のこの例 に基づいて、「#Schema」 が存在する -d を指定できます。 次のような成功が見られるだけでなく、yaml ファイルの内容は

Version: 5

です。 リーリー また、OP に従って既存のフィールドに制約を追加します:

リーリー

期待した出力が生成されるようになりました

リーリー ###編集: これは、あらゆることに Golang モジュールを使用する人にとっては、より良いアプローチです。 Golang モジュールでは、構造体フィールドのアノテーションとして制約を配置できます。

リーリー

cue get go app.go

を使用すると、次のような対応する

app_go_gen.cue が得られます。 リーリー これは、上記で参照した cue vet ... コマンドを実行する場合に有効です。つまり、Golang モジュールで制約を指定し、これらのアノテーションを構造体フィールドの制約として解釈する Cue スキーマを生成するだけで済みます。

以上がcuelangを使用して、Golangモジュールから生成されたヒントパターンの構造体フィールドに条件を付ける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート