ライブラリ探すなら基本awesome go見とけばいいけど、いろいろ楽するためという観点で、思い出した順に適当に追記していく。気が向いたらサンプルも書く
gojson
jsonのデータを渡すとそれに対応するstructを生成してくれる。JSON APIを利用するときに楽ができる。既存APIのリプレイスをGoでやるときとかも良い。
goquery
JQueryっぽくhtmlをパースしたり検索したりして楽ができる。自前でhtmlのパースなんか書いてられない。
goreq
net/http
パッケージで、httpリクエストを飛ばすのは結構面倒だったりいろんな書き方があったりしてヘッダつけるときどれ使うと楽なんだっけとか毎回調べたりするのとても面倒なので、そこを楽するときに使うラッパ。pythonのrequestsみたいなもの
使い方は公式のREADME見れば一発で分かる。
monkey
関数ポインタ書き換えてMonkey Patchingしてくれる。LL言語でのテストコードに慣れてると気軽にMonkey Patchingするおじさんになっているのでとても良い。無理やり関数ポインタ書き換えるのでセキュアなOSだと動かなかったり、インライン化されてるとうまくいかないので-gcflags -l-
が必要だったりする。スレッドセーフでもないので気をつけろ。
使い方
基本的には、関数置き換え(monkey.Patch)と置き換えたものを戻す(monkey.Unpatch)で関数を置き換える。置き換え元と置き換え先の関数のインターフェイスを揃えておく必要がある(無いと当然panicする)
特定のインスタンスに生えている関数を置き換える場合は、monkey.InstanceMethod
、monkey.UnpatchInstanceMethod
を利用する
render
httpレスポンスを楽に返すことが出来る。JSONのレスポンス返すのにいちいちNewEncoderとか書いてられない。jsonとかBinaryとか返すのが楽になる。
validator
structのアノテーションを元に、各要素のヴァリデーションをしてくれる。
公式に乗ってるアノテーションのサンプルはこんな感じ。数値型と文字列型で、よくあるヴァリデーションがアノテーションで書けて楽。
type NewUserRequest struct {
Username string `validate:"min=3,max=40,regexp=^[a-zA-Z]$"`
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
Password string `validate:"min=8"`
}
nur := NewUserRequest{Username: "something", Age: 20}
if valid, errs := validator.Validate(nur); !valid {
// values not valid, deal with errors here
}
なんか新しいのも出てた
interpose
net/http向けの便利なmiddlewareと既存のwafのmiddlewareをnet/httpで使えるようにするadaptor。
goxc
クロスコンパイルが楽になるやつ
channels
channelのラッパー集。バッファーサイズが無限の奴とか、バッファ・サイズ超えると古いやつから勝手に消えてくれる奴とかが実装されている
cron
その名の通り、cron形式の指定時間に、gorutineを動かしてくれる。自前で特定時間に動かすとかタイマー書くのはめんどうなので、cron形式で書けるので楽。普通のcronと違って秒単位まで指定できる。
Godep
普通にgo get
するとmasterの最新のコミットを取ってくるので、後方互換性がない変更があると死ぬし、全体で同じ物を共有しているのでメンテしてないコードが死んだりするので、プロジェクトの毎にライブラリを管理して、Godeps.jsonにcommit idを記録してくれる。Godep経由でbuildやtestを叩くとGOPATHを書き換えて動く。Godeps.jsonから落としなおしてくれるとかはしてくれないのでそこはいけてない。
fresh
プロジェクトのディレクトリを監視して、自動でコンパイルして再起動してくれる。godep使ってる場合はこんな感じのMakefile書いとくと良いかも。
GODEP_PATH := $(shell godep path)
fresh:
GOPATH=$(GODEP_PATH):$(GOPATH) fresh
プロジェクトのディレクトリにrunner.confというファイルを置いて設定を書くことも出来る。
gobot
arduinoとかRaspberry PiとかEdisonとかその他いろいろなロボットとか基盤をgolangから楽に使えるラッパーライブラリ。
gatt
BLEのgattプロファイルを楽に扱える奴。