詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Go

GraphQLのレスポンスJSONに対応するstructからクエリを生成できるgo-graphql-query

Go

このあいだ GitHub が公開していた GraphQL API が便利そうだったので使おうと思ったのだけど、求めたライブラリがなかったので作った次第です。 ここで GraphQL についての説明はしませんが、結果の JSON とクエリが同じ形を持っているのが便利で美しいです…

指定された型からswitch文を生成するgo-switchgenと、そのコーディング動画

Go

GitHub - motemen/go-switchgen ある日 Go で reflect パッケージを使ったプログラムを書きたい! と思い立ち、となると reflect.Kind で swtich したいわけで、ありうる case 節を全部書きつくすのは大変だ、というわけで switch 文を生成する簡単なプログ…

go-sql-driver/mysql の接続に SOCKS5 プロキシを利用する

Go

Go では proxychains みたいな方法が利用できないので、プログラム側で対応してやる必要がある。Go で SOCKS5 プロキシを利用する - 詩と創作・思索のひろば と同様に golang.org/x/net/proxy を利用して実現できる。 import ( "database/sql" "net" "golang…

Google App EngineでGoを動かすときに知っておくべきこと(ソースコード・ビルド編)

Google App Engine(GAE)で Go 製のウェブアプリを動かしたかった話。いっぺん動かしてみると GAE/Go はウェブアプリを動かす環境としてはとてもいい。ただ、中途半端な知識だけで始めると開発者としてはつまずくことが多かったので、分かりにくい点をまと…

型と名前によるGoのコード探索 ― gofind

Go

思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手…

A Tour of Go のその先: 『みんなのGo言語【現場で使える実践テクニック】』

著者の一人であり、同僚でもある songmu さんに『みんなのGo言語』をいただきました。Go言語界隈の有名人がずらりと顔を並べていて豪華。拙作のツールも大きく取りあげていただいて、ありがたいです。 自分もGoという言語が好きで、趣味ではよく書いている(…

Go 言語における並行処理の構築部材

Go

5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止…

goiferr で Go のエラー処理コードを自動挿入する

Go

Go 言語には例外機構が備わっておらず、関数や手続きのエラー的な状況を表すには、返り値を多値にして本来興味ある結果とともに error インターフェイスを返す、というのが一般的です。例をあげるまでもないですが、ファイルを開くという(失敗する可能性の…

Go のシンプルかつ明快な SQL クエリビルダ go-sqlf

Go

Go でリレーショナルデータベースを利用したアプリケーションを書いているとき、動的に SQL を組み立てたい場合には、いくつかの方法が考えられます: クエリビルダを使う。世の中にすでにいろいろ存在します。(そのためのライブラリなので)動的に生成する…

Git config から struct に読みこむ Go パッケージを書いた

Git や GitHub にまつわるツールは gitconfig に値を格納することにしておくのがユーザにも便利で、よく使っているし広く使われているとおもう。いっぽう YAML とか JSON とか設定ファイルによく使われるフォーマットは構造体に値をまとめて読みこむのが普通…

Go プロジェクトのバージョニングとリリースを CI で自動化する

Go

gobump で Go プロジェクトのバージョニングをおこなう の続き。すっかり書くのが遅くなってしまったけれど、別にもったいぶるような特別なことはないです。 ここでは、Pull Request のマージを契機に、バージョンを進めるコミットをし、push して、GitHub …

Go で SOCKS5 プロキシを利用する

Go

検索すると golang - net/httpでSOCKS proxyを扱う - Qiita という記事が見つかったけれど、今なら net/proxy パッケージを使えばよさそうだ。 雑な例だとこんな感じ。 import ( "net/http" "golang.org/x/net/proxy" ) func main() { p, err := proxy.SOCKS…

ghq v0.7 をリリースしました

2015-08-11 追記 @kyanny さんに指摘いただいた、ghq.root 配下にシンボリックリンクが存在すると ghq list などが不完全になる不具合を修正した バージョン 0.7.1 をリリースしています。最新版はこちらをご利用ください。 Release v0.7.1: Fixed symlink i…

シェルスクリプトで Go の簡易ベンダリング

Go

Heroku で Go がサポートされたのは良いニュースだったけど godep を使わなきゃいけないのが気に入らないところで、Go で Heroku に乗せたい Web アプリケーションを作る時は Docker を使う ことにした(参考)。その際にも Docker コンテナ中で go get をい…

gobump で Go プロジェクトのバージョニングをおこなう

Go

Go に限らず、公開しているプロジェクトのバージョニングは必要だけれど面倒なタスクのひとつで、プロジェクトのメンテナンスを続けていくつもりがあるのなら、ほぼ必ず通らなければならない道でしょう。ここで話題にしているのは Git などによるソースコー…

Go Conference 2015 Summer で Go の REPL gore の話をしてきました & gore 0.2.1

Go

去年からこちら Go の話をしたり聞いたりする機会があればぜひ言ってみたいと思っていたのですが、このたび Go Conferecne 2015 Summer の話を聞きつけて、うまいことスピーカー枠に入ることができたので、前に作った Go の REPL(正確には違うんだけど)で…

go-cli: ドキュメントとともにコマンドラインツールを作る

Go

hub-pr を作るとき、(ghq などで使っていた)codegangsta/cli ではなく新しいライブラリを試してみようと思って mitchellh/cli を使ってみたけど、何かしっくりこないものがあったので、せっかくだし、と自作してみた。今回の要件は以下のとおり。 (go や …

Go でコードを書く時のかゆいところに手が届く goquickfix というのを書いた

Go

go run や go test でコードを試しながら書きながら……というフェーズでは、以下のような状況によく遭遇することと思います: デバッグプリント用のコードを削除したら、"log" や "fmt" パッケージが不要になって imported and not used: "log" と言われた。ま…

コード補完もできる Go の REPL「gore」を作った

Go

タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気…

Go で reflect パッケージを使わずにジェネリックな関数を実現する

Go

あけおめ〜。Go 界においてジェネリクスを求めるのは(今のところ)はかない望みでしかないし、もちろん重々承知していることですが、それでもときどき複雑なものを書こうとするとどうしても複数の型に対応する関数が欲しくなる。そこでこの冬休みになにかう…

Git の特定リビジョンのツリーをファイルシステムのように扱う Go の実装

要件 以下のようなことができればよいものとします。 パスを与えられたとき、 そのパスが示すファイルの内容 (open, read) そのパスが示すディレクトリの内容 (opendir, readdir) そのパスが示すファイルまたはディレクトリの情報 (stat) パーミッション 最…

ソースに一行追加するだけですべての HTTP 通信をロギングするモジュールを書いた #golang

Go

こちらです。Perl でいうと Devel::KYTProf に性質がちかい。 motemen/go-loghttp motemen/go-loghttp · GitHub (GoDoc) 使用例 たとえばこういうコードに… package main import ( "io" "log" "net/http" "os" ) func main() { resp, err := http.Get(os.Arg…

AdSense のレポートを CLI で確認できるツールを書いた

Go

motemen/adsense-report-cli · GitHub 例によって go get github.com/motemen/adsense-report-cli でインストールできます。 使用例 デフォルトで、直近 7 日間の日毎の収入を表示します。 % adsense-report-cli DATE EARNINGS (JPY) 2014-07-01 1 2014-07-0…

GitHub のコミットステータスをターミナルで確認できるやつ

タイトルは若者エントリメーカーで生成しました。 コミットステータスというのは GitHub の API で特定のコミットに success/failure/pending のステータスを与えることができるやつで、例えば CI でテストした結果がプルリクエストのウェブ画面で確認できる…

Wercker で Go のプロジェクトをクロスコンパイルし、GitHub にリリースする

ghq をメンテナンスするにあたっていくつか無料の CI サービスを試してみたのですが、今回は Wercker を使うことにしました。いろいろ試行錯誤した結果表題のことがなんとか実現できた(ghq のリリースは GitHub 上 にあります)ので、ハマりポイントと共に…

Vagrant を使って複数の環境で Go のプログラムをコンパイルする(ファイルの変更監視つき)

書くコードがさまざまな OS で動くことを初めから想定しているような場合には、実際にその環境で動かしてみたい。タイトルのとおり Vagrant で仮想マシンを複数立ち上げて、それぞれの中でコンパイルおよびテストができればよいわけです。というので書いてみ…