v3.14.1592-beta2:セマンティックバージョニングについて知りたいことすべて

Go言語の宣伝に費やされた努力とお金は、多くの場合、他の開発者に利益をもたらします。 昨年の終わりに、セマンティックバージョン管理に関する非常に成功した記事がgopheracademyの Webサイトで公開されました。 npmで使用されるボリュームは家^で始まり、すべてを中断します。 翻訳はカットの下に隠れているため、バージョンレーキガーデンとその使用方法をすぐに確認できます。 Goのいくつかの例。 著者に発言権を与えます!




セマンティックバージョニング (SemVerとも呼ばれる)は、プログラムやライブラリのバージョンを操作するための一般的なアプローチになりました。 これにより、後続のリリースでの作業が容易になるだけでなく、人々や自動化がこれらのリリースの相互の互換性や世界全体との互換性を理解できるようになります。 SemVerは多くの場所で使用できますが、このアプローチは依存関係管理システムで最もよく知られています。



Go固有のことについて話す前に、セマンティックバージョニングとは何かを見てみましょう(翻訳者のメモ:この部分のために翻訳が開始されました)。











この図は、バージョン文字列のセマンティック部分を示しています。 ほとんどの場合、ドット「。」で区切られた最初の3桁のみが表示されます。 。 完全にセマンティックなバージョンは、次の部分で構成されます。







仕様では接頭辞「v」について何も言われていないという事実にもかかわらず、セマンティックバージョンの行の前に使用されることがよくあります。例えば、 「v.12.3」などです。 メタデータと同様に、それを無視するのが習慣です。



これらすべておよびその他の詳細は、公式仕様書に記載されています: http : //semver.org/



綿密に設計された仕様のおかげで、セマンティックバージョンの行は簡単に解析、ソートでき、最も重要なことには、相互および「有効な」バージョンの範囲と比較できます。 実際、これは、npmなどのほとんどの依存関係マネージャーが行うことです。



Goでのセマンティックバージョンの解析



Goには、いくつかのセマンティックバージョン管理パッケージが用意されています。 この記事では、これを検討します: github.com/Masterminds/semver 仕様に準拠し、オプションの接頭辞「v」をサポートし、ソート、範囲および制限の操作を行います。 ただし、このパッケージは制限付きで、JavaScript、Rustなどの他のプログラミング言語のほとんどのソリューションと同じように機能します。

以下の例は、セマンティックバージョンの行を解析し、「メジャー」バージョンまたはエラーメッセージを表示します。



v, err := semver.NewVersion("1.2.3-beta.1+build345") if err != nil { fmt.Println(err) } else { fmt.Println(v.Major()) }
      
      





戻り値は、多数の便利なメソッドを含むsemver.Versionのインスタンスです。 渡された文字列がセマンティックバージョンではない場合、 semver.ErrInvalidSemVerエラーが返されます。



ただし、このライブラリの本当の利点は、文字列を解析する機能ではなく、セマンティックアクションで複雑なアクションを実行できることです。



セマンティックバージョンの並べ替え



semverライブラリを使用すると、標準ライブラリを使用してセマンティックバージョンをソートできます。 例:



 raw := []string{"1.2.3", "1.0", "1.0.0-alpha.1" "1.3", "2", "0.4.2",} vs := make([]*semver.Version, len(raw)) for i, r := range raw { v, err := semver.NewVersion(r) if err != nil { t.Errorf("Error parsing version: %s", err) } vs[i] = v } sort.Sort(semver.Collection(vs))
      
      





この例では、セマンティックバージョンのセットがsemver.Versionのインスタンスに変換され、次にsemver.Collectionに追加されますSemver.Collectionには、標準のソートライブラリで使用するために必要なものがすべて揃っています。 これは、プレリリース情報を正しくソートし、メタタグを無視するのに非常に便利です。



範囲、制限、ワイルドカード



最も一般的なバージョンの質問の1つは、バージョンが指定された範囲内にあるかどうかを確認することです。 または、他のいくつかの制限を満たしますか。 これらのチェックはすべて、ライブラリを使用して簡単に実行できます。



 c, err := semver.NewConstraint(">= 1.2.3, < 2.0.0, != 1.4.5") if err != nil { fmt.Println("Error parsing constraint:", err) return } v, err := semver.NewVersion("1.3") if err != nil { fmt.Println("Error parsing version:", err) return } a := c.Check(v) fmt.Println("Version within constraint:", a)
      
      





他の言語およびツールのバージョン範囲に精通している人のために、ライブラリはよく知られた表記法を提供します:







今すぐセマンティックバージョンの使用を開始する



そして、あなたの髪は柔らかく、絹のようになります! プロジェクトでバージョンを使用できる場合は、時間を無駄にせず、セマンティックバージョニングの標準を使用することをお勧めします。 Goには上記のgithub.com/Masterminds/semverライブラリがあり、ほとんどの最新の言語とツールチェーンも提供するものがあります。 特にNode.jsとnpm。



All Articles