AllIsHackedOff

Just a memo, just a progress

GoでSemantic Versionを適当にparseするパッケージ

久々の更新 今回Semantic Versionをparseするパッケージ探していて思ったのですが、awesome-goもアレげだし、普通のgopher勢は 欲しいパッケージをどこで探しているのだろうか? Gopher勢の場合、自前で作っちゃう勢が多そうなイメージがありますがRubyでいうToolbox的なのがあると便利なんだけどなと思ったり。

handling Semantic Versioning in Golang

Goでバージョンを適当に扱う必要がありパッケージを探したところhashcorp製の GitHub - hashicorp/go-version: A Go (golang) library for parsing and verifying versions and version constraints. この子を見つけた。

NewVersion がerrを返すの若干使いづらさを感じるが、別にmap系の関数で移したいわけではないのでよく考えると特に問題はない。 サンプルコード通りだがかきの感じで動く、Versionの昇順がデフォルト sort パッケージに修正が入ってからは Reverse が~とか考えなくて良くなったので非常に良い...

package main

import (
    "fmt"
    "sort"

    "github.com/hashicorp/go-version"
)

func main() {
    versionsRaw := []string{"1.1", "0.7.1", "1.4-beta", "1.4", "2"}
    versions := make([]*version.Version, len(versionsRaw))
    for i, raw := range versionsRaw {
        v, _ := version.NewVersion(raw)
        versions[i] = v
    }

        // この辺、すごい昔にReverseするのがクソめんどくさかった覚えがある 
    sort.Slice(versions, func(i, j int) bool {
        isLess := versions[i].LessThan(versions[j])
        return !isLess
    })

    for _, v := range versions {
        fmt.Println(v.String())
    }
}