Go
Go において、いわゆる SSRF (Server Side Request Forgery) を防ぐような目的で、内部 IP アドレスにアクセスしない HTTP クライアントを作るには hakobe/paranoidhttp が便利だった。ただ、近年ではこれが作られて以降の Go 側のアップデートとして、net.D…
最初から完璧な設計と実装ができているなら苦労はないわけだけど、実際にはそうもいかない。具体的にはある程度の規模になってくると「あーこの関数 context.Context 対応したい!」みたいな気持ちが湧いてくるわけです。context 対応ってのは、第一引数に c…
ちょっとしたコマンドラインツールを作ってるときはよく go run main.go するんだけど、作業ディレクトリが main.go から離れてしまうと go run $GOPATH/src/... みたいなことをする羽目になり、ちょっとありがたくない。ファイルが増えてくると go run *.go…
Go 1.10 Release Party in Tokyo - connpass 「Go 1.10 ツール周辺の CL を読む」という話をしました。 Go 1.10 ツール周辺の CL を読む - Google スライド Songmu さんに「モテメン、Goリリースパーティー出ない?」と言われて安請け合いしたはいいものの、…
生成が重いリソース(や重い処理の実行権)を goroutine 間で共有し使いまわすようなパターンです。よく知られていて名前がついていそうだけど、ぐぐっても分からなかったので書いておく。 コネクションプールに近い感じで、最初にリソースを生成したあと、…
最近は仕事でも新しくGoのプロジェクトをイチからはじめることが増えてきて、コピペ元が欲しくなるので、スナップショットとして残しておきます。とくに Go でウェブアプリケーションを書くような場合を想定していて、npm エコシステムにも乗っていきます。 …
夏休みの自由研究です。 ghr を go get したいんだけど作者の e の数って何個だったっけ……と悩んでいたらそもそも違う ID でした、けどそれも思い出せない! って経験ありませんか? たいていの場合、プログラム名だけは覚えていて、その正確なパスまでは覚…
このあいだ GitHub が公開していた GraphQL API が便利そうだったので使おうと思ったのだけど、求めたライブラリがなかったので作った次第です。 ここで GraphQL についての説明はしませんが、結果の JSON とクエリが同じ形を持っているのが便利で美しいです…
GitHub - motemen/go-switchgen ある日 Go で reflect パッケージを使ったプログラムを書きたい! と思い立ち、となると reflect.Kind で swtich したいわけで、ありうる case 節を全部書きつくすのは大変だ、というわけで switch 文を生成する簡単なプログ…
Go では proxychains みたいな方法が利用できないので、プログラム側で対応してやる必要がある。Go で SOCKS5 プロキシを利用する - 詩と創作・思索のひろば と同様に golang.org/x/net/proxy を利用して実現できる。 import ( "database/sql" "net" "golang…
Google App Engine(GAE)で Go 製のウェブアプリを動かしたかった話。いっぺん動かしてみると GAE/Go はウェブアプリを動かす環境としてはとてもいい。ただ、中途半端な知識だけで始めると開発者としてはつまずくことが多かったので、分かりにくい点をまと…
思いつきでツールを作ってはリスのように忘れ、再発見しては新鮮な気持ちで便利に使う日々です。 一般にプログラミングにおいては、ソースコードを読むことに意外とばかにならない時間を使うもの。特に Go ではデフォルトで標準ライブラリのソースコードが手…
著者の一人であり、同僚でもある songmu さんに『みんなのGo言語』をいただきました。Go言語界隈の有名人がずらりと顔を並べていて豪華。拙作のツールも大きく取りあげていただいて、ありがたいです。 自分もGoという言語が好きで、趣味ではよく書いている(…
5年前に買った『Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』をようやく読んだ。買った頃には Perl やシンプルな JavaScript ばかり書いていたので並行プログラミングなんてほとんど気にすることがなく、実感がなくて読むのも途中で止…
Go 言語には例外機構が備わっておらず、関数や手続きのエラー的な状況を表すには、返り値を多値にして本来興味ある結果とともに error インターフェイスを返す、というのが一般的です。例をあげるまでもないですが、ファイルを開くという(失敗する可能性の…
Go でリレーショナルデータベースを利用したアプリケーションを書いているとき、動的に SQL を組み立てたい場合には、いくつかの方法が考えられます: クエリビルダを使う。世の中にすでにいろいろ存在します。(そのためのライブラリなので)動的に生成する…
Git や GitHub にまつわるツールは gitconfig に値を格納することにしておくのがユーザにも便利で、よく使っているし広く使われているとおもう。いっぽう YAML とか JSON とか設定ファイルによく使われるフォーマットは構造体に値をまとめて読みこむのが普通…
gobump で Go プロジェクトのバージョニングをおこなう の続き。すっかり書くのが遅くなってしまったけれど、別にもったいぶるような特別なことはないです。 ここでは、Pull Request のマージを契機に、バージョンを進めるコミットをし、push して、GitHub …
検索すると golang - net/httpでSOCKS proxyを扱う - Qiita という記事が見つかったけれど、今なら net/proxy パッケージを使えばよさそうだ。 雑な例だとこんな感じ。 import ( "net/http" "golang.org/x/net/proxy" ) func main() { p, err := proxy.SOCKS…
2015-08-11 追記 @kyanny さんに指摘いただいた、ghq.root 配下にシンボリックリンクが存在すると ghq list などが不完全になる不具合を修正した バージョン 0.7.1 をリリースしています。最新版はこちらをご利用ください。 Release v0.7.1: Fixed symlink i…
Heroku で Go がサポートされたのは良いニュースだったけど godep を使わなきゃいけないのが気に入らないところで、Go で Heroku に乗せたい Web アプリケーションを作る時は Docker を使う ことにした(参考)。その際にも Docker コンテナ中で go get をい…
Go に限らず、公開しているプロジェクトのバージョニングは必要だけれど面倒なタスクのひとつで、プロジェクトのメンテナンスを続けていくつもりがあるのなら、ほぼ必ず通らなければならない道でしょう。ここで話題にしているのは Git などによるソースコー…
去年からこちら Go の話をしたり聞いたりする機会があればぜひ言ってみたいと思っていたのですが、このたび Go Conferecne 2015 Summer の話を聞きつけて、うまいことスピーカー枠に入ることができたので、前に作った Go の REPL(正確には違うんだけど)で…
hub-pr を作るとき、(ghq などで使っていた)codegangsta/cli ではなく新しいライブラリを試してみようと思って mitchellh/cli を使ってみたけど、何かしっくりこないものがあったので、せっかくだし、と自作してみた。今回の要件は以下のとおり。 (go や …
go run や go test でコードを試しながら書きながら……というフェーズでは、以下のような状況によく遭遇することと思います: デバッグプリント用のコードを削除したら、"log" や "fmt" パッケージが不要になって imported and not used: "log" と言われた。ま…
タイトルの通りです。Go は LL 的に使える、とはよく申しますが、そういう意識で使っていると REPL 的なことをしたいときに困りがちですよね。そこで作りました。gore。いい名前ですね。 motemen/gore · GitHub 以下のスクリーンキャストでだいたいの雰囲気…
あけおめ〜。Go 界においてジェネリクスを求めるのは(今のところ)はかない望みでしかないし、もちろん重々承知していることですが、それでもときどき複雑なものを書こうとするとどうしても複数の型に対応する関数が欲しくなる。そこでこの冬休みになにかう…
要件 以下のようなことができればよいものとします。 パスを与えられたとき、 そのパスが示すファイルの内容 (open, read) そのパスが示すディレクトリの内容 (opendir, readdir) そのパスが示すファイルまたはディレクトリの情報 (stat) パーミッション 最…
こちらです。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…
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…