全力で怠けたい

怠けるために全力を尽くしたいブログ。

シェルでセマンティックバージョンをソートする Go のコードスニペットのメモ。

たまにシェルでセマンティックバージョンをソートすることがあるので Go でのコードスニペットをメモしておく。

コードはこんな感じ。エラー処理は適当。

package main

import (
    "bufio"
    "fmt"
    "os"
    "sort"

    "github.com/Masterminds/semver"
)

func main() {
    var a []string
    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        s := scanner.Text()
        a = append(a, s)
    }
    if err := scanner.Err();  err != nil {
        panic(err)
    }
    if len(a) == 0 {
        return
    }

    versions := make([]*semver.Version, len(a))
    for i, s := range a{
        v, err := semver.NewVersion(s)
        if err != nil {
            panic(err)
        }
        versions[i] = v
    }

    sort.Sort(semver.Collection(versions))
    for _, v := range versions {
        fmt.Println(v)
    }
}

こんな感じで使う。

$ cat versions.txt
1.0.0
1.0.0-beta.1
1.0.0-rc.1
1.0.0-alpha.1

$ cat versions.txt | go run main.go
1.0.0-alpha.1
1.0.0-beta.1
1.0.0-rc.1
1.0.0