write ahead log

ロールフォワード用

golang

Excelファイルをgrepするコマンドを作った

Excelドキュメントをたくさん掘り返す仕事が回ってきたので、これはちょっとキツイぞとビール飲みながら作った。 検索するとExcelアドオンはたくさん出てくるけど、取り回し悪いんだよね。 github.com goだとCI設定したらバイナリまで出してくれて助かる。 h…

goとvueでtodoアプリを作った

コードはここ. github.com デモはここで動かした.Heroku最高. https://github.com/twinbird/vue-go-todo 「低レベルプログラミング」を斜め読みして疲れたので, 「バー」っと書いて「ドーン」と動くものを触りたくなったから作った. 仕事でもいつかは使うだ…

配管を作って学ぶGit

この記事はGit Advent Calendar 2019の記事です. ———————————————————— 最近, 仕事でコードを書いてない... そんな所にPro Gitをちょうど読み終わったので, Gitを作ることにしました. toy-gitという個人プロジェクトです. このプロジェクトの最終目標は自作…

golangでHTTPヘッダを追加した時のメモ

リバースプロキシを使うことが多いだろうから, net/httpで書いたサーバがそのまま外に出る事は少ないと思うけど. App Engineがね.(設定とかでいい感じにしてくれるんですかね?) 書いたコード こんな感じでラッパーを作って. /* * HTTPヘッダを送出するように…

goでbrainfuckを書いた

こんな面白そうな記事があったので作ってみた. github.com 全ての最適化を実装するのはちょっとしんどかったので(というか途中で飽き始めた)2段階目まで作った. 実行速度を見ると元記事通り, 明らかに差が出るのが面白い. 試行回数1だけど. $ go test -bench…

goのtemplateパッケージのblockアクションを使う

テンプレートが定義済みの場合と未定義の場合で処理を分けられる. 割と便利そう. とりあえずコードを置いておく. {{define "layout"}} <html> <head></head> <div> {{block "contents" .}} not found {{end}} </div> </html> {{end}} {{define "contents"}} <h1>contents</h1> {{end}} package main import …

goのhtml/templateでカスタム関数を追加する

golangのテンプレートエンジン(html/template)ではデフォルトで組み込み関数が用意されていますが, 物足りない場合は自作する事になります. 考え方 基本は以下です. template.FuncMapを作る(関数名と関数のmap) このmapをテンプレートのFuncs関数に渡して登…

golangでテンプレートエンジンを使う(その2)

以前, templateパッケージを利用する方法を調べたけど, 構成的な意味でもうちょっと実用的な例が欲しいので書き残しました. コードはgithubに置いておきます. https://github.com/twinbird/go-template-samplegithub.com やりたいこと どのページでも使うlay…

golangでzipを作る

archive/zipパッケージなるものがあります. The Go Programming Language - Package zip 使い方 zipアーカイブは複数のファイルが入るので, 1つのio.Writerから複数ファイルのwriterを作成する構成をとっているようです. zipWriter(io.Writerから作成) write…

golangでメールを送る

golangのメールパッケージnet/smtpはなんというか, 非常に薄いです. 他のパッケージも同じで思想がハッキリ出ていますが, smtpパッケージも例外ではありません. おかげでメールの仕組みを学ぶことが出来ました. ただまぁ, メールは外部パッケージ使ったほう…

golang(net/http)でBasic認証する

net/httpでBasic認証を使ったのでスニペットとしてメモ. package main import ( "fmt" "net/http" ) const ( basicAuthUser = "user" basicAuthPassword = "password" ) func main() { http.HandleFunc("/need", needAuthHandler) http.HandleFunc("/unneed"…

goでlifegame書いた

そういや書いたことないな.と思ったので書いた. github.com 作ってみると中々面白く, 色々なパターンを試してみたくなる. 引き込まれるというのも納得である. バグってなけりゃいいけど. (テストとか書いてないし) こんな感じ block glider ハチの巣 参考 ラ…

golangで実行中のOSの種類を判別する

簡単だった.ポータビリティがすごい. package main import ( "fmt" "runtime" ) func main() { switch runtime.GOOS { case "windows": fmt.Println("running on Windows.") case "darwing": fmt.Println("running on Mac OSX.") case "linux": fmt.Println(…

golangで画像を扱う(imageパッケージを使う)

書店でInterface 5月号を見つけて, 画像処理が懐かしくなったので. (つい買ってしまった.他にも車載用OSとか面白いしね.) golangにもimageパッケージという2D画像用ライブラリが標準で備わってるようなのでちょっと使ってみる. 1. 概要 golangの他の標準パッ…

golangでcontextパッケージを使う

使わないから全然覚えられない. とりあえずサンプルを書いて覚えておく. 詳細や思想はdeeeetさんの記事が非常にわかりやすいのでこれ読めばそれでいいと思う. 大雑把な理解 context.Backgroundでcontextを作るか, よそからもらってきたcontextを使って With*…

golangでテンプレートエンジンを使う

【追記】もうちょっと例が欲しくなったので, その2も書きました golangではテンプレートエンジンが標準で用意されています. なんだけど, ちょっと癖があって僕はすぐにはなじめなかった. まぁ, テンプレートエンジンなんて慣れの問題な気がするけど. 調べな…

golangでデータベース(RDBMS)を扱う[MySQLの例]

まぁ, ドキュメント読めという話なんですが. 一々例を載せたら長くなってしまいました. とはいえ, 僕の様なコピペプログラマにはこれくらいしておいた方が... 準備 まずは有難くパッケージをgo getします. go get github.com/go-sql-driver/mysql 操作方法 …

golangのimport文で別名つける

golangのimport文は別名をつけることができる. 普通のimport文は package main import ( "fmt" //ここ ) func main() { fmt.Println("hello") } こんな感じで文字列でパッケージ名を指定するだけ. 別名をつける場合には以下のようになる. package main impor…

golangでバイナリを操作する

golangは低レベルな処理(バイナリの取り扱いとかね)もちゃんと行うことができる. 基本(byte型を使う) golangは組み込みでbyte型が用意されている. これはその名の通りバイトを扱うための型で, 配列やスライスにすれば単純なバイトストリームを扱える. packag…

golangでfnvハッシュ関数を使う

FNVハッシュ関数は64bit or 32bitでの出力を行うことができるハッシュ関数です. SHAシリーズ(SHA-1など)やMDシリーズ(MD5など)などとは異なり, 衝突耐性よりも実装が効率的な事を重視しているっぽい. 逆にセキュリティなどを重視するところでは使っちゃダメ…

golangでシグナルをハンドリングする

golangでコマンド作ってもctrl + cとかで止めたくなるじゃないですか. ちょっと調べた. package main import ( "fmt" "os" "os/signal" "syscall" ) func main() { sig_ch := make(chan os.Signal, 1) signal.Notify(sig_ch, os.Interrupt, syscall.SIGHUP, …

golangでtsv(csv)を読む

探せばいくらでも出てきそうだけど,メモしておく. コード見たほうが早いと思うので. package main import ( "encoding/csv" "fmt" "log" "strings" ) func main() { // テスト用文字列 str := "test\tテスト\nHello\tこんにちは" // CSVのReaderを用意 r := …

golangでオブジェクトをシリアライズしたい

cacheに乗せたい時やちょっとしたものを作るときには簡単にシリアライズ/デシリアライズできる パッケージがあると便利だ. gobパッケージを使うと簡単にできるようだ. rpc向けのパッケージらしい. 他ではencoding/jsonやencoding/xmlだろうか.ここら辺はググ…

golangのtime型のゼロ値はどうやって判定するのか

と思ってちょっとググったらちゃんと公式に記載があった. time package - time - Go Packages 1年1月1日の0時だそうだ.特に驚かない. ここがこの言語のいいところだと思う. (Rubyにも驚き最小の法則ってあったね) いちいち判定に上記時刻を使うのは面倒なの…

golangでプログラムをデーモン化する(ように見せる)

golang標準ではデーモンを作れないという話を聞いたことがありましたが, デーモン化対応は続いているみたいです. さて、困った.標準でやりたかったなー.と思っていたのですが,とりあえず作成したプログラム単体でできるように以下の方法を取りました. os.Arg…

golangでWindows10上でSQLite3を使う

golangでSQLite3を使う情報は多いのだけれど, Windowsで使うとなると一気に情報が減ってしまう. 事前準備 ちょっと面倒ですが,まずはgccが必要です. 以下からダウンロードします. tdm-gcc msys2なんかでよく使うMinGWではダメっぽいです. (msys2使ってるので…

net/httpのhttp.HandlerFuncをラップするテクニック

golangでnet/httpを使うと下記のようなコードを書くことになる. func main() { http.HandleFunc("/foo", fooHandler) http.HandleFunc("/bar", barHandler) http.ListenAndServe(":8080", nil) } ここで全てのハンドラの前に認証を追加したいなどと考えると,…

golangでファイル・ディレクトリを操作する

ちょっとしたツールを作るのにも, DBを使うのが面倒な時にもファイル操作は便利. サンプルコードの実行にはosパッケージをインポートしてください. (Printしてるものには当然fmtも) import ( "os" "path/filepath" //ファイルパス操作の時は ) ディレクトリ…

goでコマンドラインツールを作る時にflagパッケージを使う

go言語(golang)はマルチプラットフォームでバイナリを吐けるのでコマンドラインツールを作るにはちょうどいい言語だと思います. 標準パッケージも充実していて,オプションやメッセージを出力するパッケージが標準で準備されています. 当初ググると以下が人気…

golangの日付フォーマット指定が面白い

百聞は一見に如かずということでとりあえずサンプルを. package main import ( "fmt" "time" ) const ( DATE_TIME_FORMAT = "2006/01/02/15:04:05" ) func main() { now := time.Now().Format(DATE_TIME_FORMAT) fmt.Println(now) } 実行結果 $ ./sample.exe…