fkm blog

software開発に関することを書いていきます

go

GoのASTをちょっと触ってみる

「やってみた」系の記事はときどきここに書きます.Goはソースファイルを食べさせるとASTにしてくれるライブラリが標準であります. ここまではちょっとぐぐると出てくる. package main import ( "go/parser" "go/token" ) func main() { src := "package mode…

Goのmailgunクライアント

mailgunというサービスがあります. ドメインもっていればTXTレコードとCNAMEを追加するだけで, 無料で10000通/日 メールが送れます(持ってない場合はmailgunが1つ送信用のをくれます)これをGoで叩きたかったのでクライアントライブラリ書いてみました. 後か…

Goのtypeで遊ぶ

こんな関数があったとする. func GetById(userId string) User { } 引数が文字列なので, 間違ってオブジェクトIDを入れてしまうかもしれない. そしてそれはコンパイル時にはわからない. なので, UserIDという型を用意して, 間違いを防ごうと考えた. package …

Golangのhttp/templateをちょっと触ってみた

後でfkmsoft blogにも追加しておきます. 要するにHTMLテンプレートが使えればいいんです テンプレートを用意する こんな感じ. t.htmlとしておきます. 置き換える部分は{{.フィールド名}} <html> <body> <h1>Welcome {{.Name}}</h1> </body> </html> 使ってみる オブジェクトが1つ必要. // main…

Goのパッケージの分け方

Goのパッケージの分け方で試行錯誤中なfkmです. Goに限らずかもですが。。サーバーサイドGo(という表現が正しいかどうかは不明)で, こんな感じのパッケージ構成ってどうなんだろう? main.go server | server.go | handler | logic | modelmain.goは, server…

ローテートするWriter

Goのlogは出力先としてio.Writerを与えることができる. なのでos.Fileを開いて渡すとファイルに書いてくれる.でもローテートまではやってくれないので, こんなの書いてみた. type rotateWriter struct { fileName string day int writer io.WriteCloser } fu…

nginx + GoのFastCGI

nginxを前段に, Goでサーバーを書いて, FastCGIで動かしてみた. GoでFastCGI net/httpの代わりにnet/http/fcgiを使う. package main import ( "github.com/gorilla/mux" "log" "net" "net/http/fcgi" ) func main() { r := mux.NewRouter() l, _ := net.List…

Goのlog.Fatal()を呼ぶと?

サーバーサイドでlog.Fatal()を呼んだら大変なことになった話. といってもログがでてプロセス止まっちゃったので何事?と思ってソースを読んでみる. func (l *Logger) Fatal(v ...interface{}) { l.Output(2, fmt.Sprint(v...)) os.Exit(1) } 気軽にFatal()…

Goのdatabase/sqlパッケージでコネクションプールを使うには?

結論から先に言ってしまうと, sql.DB構造体がコネクションプールもってます. なので, あんまり考えることなさそう.まずはドキュメントを読んでみる. type DBDB is a database handle representing a pool of zero or more underlying connections. It's safe…