隙あらば寝る

うぇぶのかいしゃではたらくえんじにあがかいています

golang

dockerコンテナ名の由来になったハッカーを調べる

dockerのコンテナ名って面白いなと思って調べていたら、これは著名なハッカーを元ネタにしてgenerateしているらしい。 Dockerコンテナのおもしろい名前 | SOTA こちらで詳細に解説されていた、なるほど。 namesgeneratorパッケージを眺めていると、ソースコードに…

goのソースコードのリファクタリングに使えるgodoctorと、goを書くときに使うエディタについて

Go Doctor - The Golang Refactoring Engine リファクタリングの支援を行ってくれるツール。 godoctorはgo向けのリファクタリングのために 変数や関数名の変更 関数の抽出 変数定義var/:=の相互変換 godoc向けコメントのテンプレート挿入 を行ってくれる。 各…

golangでDeprecated APIのドキュメント

Deprecating things in Go · go bits で紹介されている Deprecated な API のドキュメントについて。 新しいAPIの追加等に伴って、古いAPIを非推奨扱いにしてドキュメントを書くことがある。 その場合、ドキュメント(godoc)を書く場合に// Deprecated: でコメン…

Go http framework所感

golangのhttp framework評をみて思うところがあったので個人的な意見を書く。 そこそこの期間メンテナンスするようなものを想定。 結論から言うと net/http でがんばる派。 中長期のメンテナンスを考えるとフレームワークに振り回されるのはあまり得策でないと…

Go 1.7.4 and Go 1.6.4

[security] Go 1.7.4 and Go 1.6.4 are released(google groups) Go 1.7.4 と 1.6.4 が security fix としてリリースされたので内容を確認してみた。 修正は2点。 crypto/x509 osxの証明書に関する問題 ユーザの設定でroot証明書を信頼しないように設定してい…

LINE bot on GAE-go

Google App Engine で line bot に挑戦した。 go on Google App Engine の準備 まずはgae-goの単純なアプリを実行する。 https://cloud.google.com/appengine/docs/go/quickstart に従って進める。 $ git clone -b part1-helloworld https://github.com/GoogleC…

go を書く際に意識する命名ルール

What's in a name? golang 開発者 Andrew Gerrand さんの発表資料。 変数や型、引数の命名時にどうするのが良いか書かれている。 これから go を書く人はもちろん、既に書いている人でも復習がてら見ておくと参考になると思う。 資料内でもおすすめされているが、…

go で変数のメモリ割り当て状況を確認する

tl;dr 気になったら testing.B で測定 -gcflags=-m を使って最適化状態を確認 heap を使っているつもりでもコンパイラが stack にのせてくれるケースがある ベンチマーク パフォーマンスについて調べるためにベンチマークを作成していた所、想定と異なる挙動…

go-debian

go-debian という go から debian パッケージを操作するためのライブラリ。 作者自ら概要と簡単な使い方を紹介している。 Ceci n'est pas une -EPIPE 普段 deb のお世話になることがおおいのでコードからパッケージ情報にアクセスできるのは運用方面の作業で自…

golang race detector

race detector? golang には race detector というデータ操作の競合を検出してくれる機能がある。 https://golang.org/doc/articles/race_detector.html マルチスレッドなプログラムを書いたことがある人は経験があると思うが、2つ以上のスレッドが同じデー…

golang json decoder and eof

tl;dr; json.Decoder は EOF を検出するとその後 decode を行わなくなる。 この挙動は tail しつつデコードを続けるような要件と合わない。 詳細 ファイルを tail しつつ、1行毎に json が追記されるようフォーマットを decode したいと考えていた。 以下の…

golang で ip アドレス操作をするライブラリを書いた

golang で IP アドレスを操作するにあたって、 あるアドレスから相対的に前後のアドレスを得る ブロードキャストアドレスを得る というのがやりたくなってライブラリ書いた。 github.com API は以下。 godoc.org net.IP と net.IPNet を匿名フィールドにした…

go での error の返し方

go しばらく書いてると someErr := errors.New("some error") func SomeFunc(arg string) error { ... return someErr } func main(){ if err := SomeFunc(a); err != nil{ if err == someErr { log.Println(err) } } } のようなエラー処理はよくやる。 しか…

sync.Pool で楽して高速化

golang には sync.Pool というライブラリがある。 同じ処理を何度も実行 都度メモリ割り当てが発生 するような場合にサクッとパフォーマンスを向上させられるので紹介する。 メモリ割り当ての処理と、メモリ解放のために動く gc の実行時間を削ることでパフ…

panicparse

golang のソフトウェアが panic するとスタックトレースが出る。 読みやすいかと言われるとそんなことはなく、goroutine の数だけスタックも表示されるのですごいことになる。 maruel/panicparse · GitHub はスタックトレースを読みやすく整形してくれるツー…