詩と創作・思索のひろば

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

Fork me on GitHub

Go

Goでプライベートネットワークへのアクセスを制限する

Go

Go において、いわゆる SSRF (Server Side Request Forgery) を防ぐような目的で、内部 IP アドレスにアクセスしない HTTP クライアントを作るには hakobe/paranoidhttp が便利だった。ただ、近年ではこれが作られて以降の Go 側のアップデートとして、net.D…

Go の関数を context 対応するツール

Go

最初から完璧な設計と実装ができているなら苦労はないわけだけど、実際にはそうもいかない。具体的にはある程度の規模になってくると「あーこの関数 context.Context 対応したい!」みたいな気持ちが湧いてくるわけです。context 対応ってのは、第一引数に c…

パッケージ指定で "go run" する

Go

ちょっとしたコマンドラインツールを作ってるときはよく go run main.go するんだけど、作業ディレクトリが main.go から離れてしまうと go run $GOPATH/src/... みたいなことをする羽目になり、ちょっとありがたくない。ファイルが増えてくると go run *.go…

Go 1.10 Release Party in Tokyo で go test, go vet に入った変更の話をしました

Go

Go 1.10 Release Party in Tokyo - connpass 「Go 1.10 ツール周辺の CL を読む」という話をしました。 Go 1.10 ツール周辺の CL を読む - Google スライド Songmu さんに「モテメン、Goリリースパーティー出ない?」と言われて安請け合いしたはいいものの、…

チャンネルを使って、決まった数のリソースをgoroutine間で共有するパターン

Go

生成が重いリソース(や重い処理の実行権)を goroutine 間で共有し使いまわすようなパターンです。よく知られていて名前がついていそうだけど、ぐぐっても分からなかったので書いておく。 コネクションプールに近い感じで、最初にリソースを生成したあと、…

最近のGoプロジェクトのMakefile

Go

最近は仕事でも新しくGoのプロジェクトをイチからはじめることが増えてきて、コピペ元が欲しくなるので、スナップショットとして残しておきます。とくに Go でウェブアプリケーションを書くような場合を想定していて、npm エコシステムにも乗っていきます。 …

go get gobin.cc/PROGNAME でプログラムをゲットできる URL shortener っぽいサイトを作った

Go

夏休みの自由研究です。 ghr を go get したいんだけど作者の e の数って何個だったっけ……と悩んでいたらそもそも違う ID でした、けどそれも思い出せない! って経験ありませんか? たいていの場合、プログラム名だけは覚えていて、その正確なパスまでは覚…

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…

はてなで一緒に働きませんか?