タグ

ブックマーク / motemen.hatenablog.com (3)

  • Git config から struct に読みこむ Go パッケージを書いた - 詩と創作・思索のひろば

    GitGitHub にまつわるツールは gitconfig に値を格納することにしておくのがユーザにも便利で、よく使っているし広く使われているとおもう。いっぽう YAML とか JSON とか設定ファイルによく使われるフォーマットは構造体に値をまとめて読みこむのが普通でもある。そういうわけで表題のようなものを書いた。以下の例を見れば分かるとおり gitconfig ファイルを自力で解析してすべての値を読みこむようなものではないです。 README より GoDoc のほうが詳しいです。 使い方 gitconfig フィールドタグを使います。 import "github.com/motemen/go-gitconfig" type C struct { UserEmail string `gitconfig:"user.email"` PullRebase bool `gitconf

    Git config から struct に読みこむ Go パッケージを書いた - 詩と創作・思索のひろば
    zetamatta
    zetamatta 2015/08/22
    git 向けツールを Go で作る時に便利なのかな?
  • gobump で Go プロジェクトのバージョニングをおこなう - 詩と創作・思索のひろば

    Go に限らず、公開しているプロジェクトのバージョニングは必要だけれど面倒なタスクのひとつで、プロジェクトのメンテナンスを続けていくつもりがあるのなら、ほぼ必ず通らなければならない道でしょう。ここで話題にしているのは Git などによるソースコードのバージョン管理ではなく、たとえばバージョン 3.1.4 といった、リリースされるソフトウェアの公開バージョンをどう運用するか、という話です。 バイナリとして配布する前提のプロジェクトであればソース中で var version string と宣言した変数に、ビルド時に -ldflags '-X main.Version 3.1.4' などとしてバージョンを設定するという方法もありますが、go get による配布ができるのなら、提供側としては楽ができます。たとえば gore は開発者向けということでバイナリの配布をしていませんが、リリース作業がな

    gobump で Go プロジェクトのバージョニングをおこなう - 詩と創作・思索のひろば
    zetamatta
    zetamatta 2015/07/17
  • Go で reflect パッケージを使わずにジェネリックな関数を実現する - 詩と創作・思索のひろば

    あけおめ〜。Go 界においてジェネリクスを求めるのは(今のところ)はかない望みでしかないし、もちろん重々承知していることですが、それでもときどき複雑なものを書こうとするとどうしても複数の型に対応する関数が欲しくなる。そこでこの冬休みになにかうまい方法はないかと考えて、作ってみました。 要件 今回はこんな関数が実現したくなりました。(擬似コードです) // map[string]int とか map[string]foo.Bar を受けつける func keys(m map[string]T) []string { keys := make([]string, 0, len(m)) for k := range m { keys = append(keys, k) } return keys } そしてこれを実現するためのアプローチを以下のように定めました。 reflect パッケージを使わ

    Go で reflect パッケージを使わずにジェネリックな関数を実現する - 詩と創作・思索のひろば
    zetamatta
    zetamatta 2015/02/14
    >自動的に同じパッケージからの呼び出しを検出し、型のパターンを実際の引数の型と突き合わせて case 節を追加した type switch を生成し、変更後のファイルの内容を標準出力に印字します
  • 1