write ahead log

ロールフォワード用

golang

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でTwitterもどき書いた

デザインを考える段階でいつも飽きる. リファクタリングもテストも書いてないけど, 自分用のサンプルコードぐらいにはなるしGitHubに入れておいた. github.com

退屈だしgolangでmemcachedサーバもどき作った

memcached, 使ったことないけどね. 最近仕事はExcelばかりで, 面白くないので. github.com 感想とか 分散はしないし, クライアントは無いしでなんか中途半端感がある. 本当は分散させたりしてみたいんだけど, 今の自分には厳しそう. DHTとかそのうちやりたい…

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でテンプレートエンジンを使う

golangではテンプレートエンジンが標準で用意されています. なんだけど, ちょっと癖があって僕はすぐにはなじめなかった. まぁ, テンプレートエンジンなんて慣れの問題な気がするけど. 調べながら書いたらめちゃ長くなった. ざっくり概要 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で)

子供が熱出して休暇もらったので, おかあさんといっしょを見ながらこれ書いてます. わけあって8bit出力のハッシュ関数を探していたんですが, 流石に標準ではなさそうなので簡単でそこそこ良いものを探していました. (32bitならFNVがありました.そのうち使い…

golangで端末で使う単語帳を作った

作った. 学生の課題みたいですね. github.com これは何 端末上で使う単語帳です. こんな感じのデータを用意すると こんな感じになります. 実際にタイプしたり考えたりしないと覚えられないので, 作りました. ブラウザ上でもよかったのですが, 個人的事情で端…

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 := …

App Engine + Golangでチートシートを作るだけのアプリを作った

作った. https://cheat-sheet.tech だって面倒なんだもの チートシートって 便利な割に作るのが面倒. 他人が作ったものはしっくりこない っていうパターンにいつもなるので, 多少は楽が出来るものを作りました. どんなものか Markdownの劣化版みたいな記法で…

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

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

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

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

golang + Google App Engineを試したかったので掲示板を作った

ふと, Google App Engine(GAE)を試してみたかったのでなにか作ろうと思った. 「掲示板が作れれば大体なんとかなる」とか言いますし,とりあえず掲示板を作りました. 出来たものは以下.適当に時間が経って邪魔になったら多分インスタンス消します. app engine …

xlsxファイルをコマンドラインで操作するツールを作った

golangで作った.用途はわかる人にはわかる. github.com これは何? 行指向のxlsxファイルの編集ツールです. シェルと合わせて使ってます. インストール go getでどうぞ. go get github.com/twinbird/xl 使い方 まずはサンプルのファイルを $ cat test.txt 550…

golangでRedmineの情報をExcelにするコマンドラインクライアントを作った

[追記] id:mattnさんのgodmineがあるので, xlsxをコマンドラインから扱うツールを作りました. たぶん組み合わせて使ったほうが使い勝手いいです.たぶんね. golangでRedmineの情報をExcelにするコマンドラインクライアントを作りました. github.com 使い方 準…

golangでビデオアルバムアプリを作った

golangで小さいツールはいろいろ書いてみたけどWebアプリも書いてみようということで作ってみた. github.com 正直途中から飽きてきて,やっつけで作った感が否めない. ある程度機能作って書き直していこうと思っていたけど,ある程度の機能さえ作っていない. …

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

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

golangでWindows10上でSQLite3を使う

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

golangでExcelファイルを読みだす

Excelファイルの読み出しというのは業務アプリを作る際には避けられません. (そもそも業務アプリをgolangで作成できる会社なんてあるのかわかりませんが) ということでExcelファイルを読みだしてみます. 利用パッケージ 以下のパッケージを使わせてもらいま…

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…

golangでJSONをパースする

いろいろな所に書かれているけど,ハマってしまったので書き残しておく. golangでJSONをパースするにはencoding/jsonを利用すれば良い. 静的言語だけあってちょっと面倒なところがあって,JSONの構造に合わせて前もってstructを定義しておく必要がある. 基本 …

golangでhttptestを使ってテストする

ちょっとしたコマンドとか作る時にWebAPIを触ろうとすると, net/httpをよく使うことになる. テストについてはちょっと調べたんだけどhttp経由のものはやったことがなかった. net/httpはテストについてもnet/http/httptestがサポートしてくれているのでこれを…

GitHubのReleaseのダウンロード数を調べるコマンドを作った

別にcurl叩けばわかるんだけど,面白そうだし作った. github.com 使い方 ここからバイナリをダウンロードしてください. GitHubにアクセスして, Home -> Setting -> Personal access tokens -> Generate new tokenからアクセストークンを取得してください. 環…

golangで色々なOSのバイナリを作る

前も調べたけど記録してなかったので忘れた.今度はメモっとく. golangで他のプラットフォーム向けにクロスコンパイルするには環境変数を指定してbuildすれば良いらしい. 環境変数は GOOS GOARCH があってそれぞれOSとCPUアーキテクチャを表している. Linux環…

golangではてなブログに投稿するCUIクライアントを作った

はてなブログにコマンドラインから投稿できるクライアントアプリを作りました. golangで作ったので多分どこでも動きます. というか動かないと困るなぁ. この記事もviでMarkdownで書いて以下のコマンドで投稿してます. (プレビューと公開は子供に引きずられな…

golangで最低限のテストを書きたい

golangは触り始めたばかりで右も左もわからない状況なんだけれど,テストの書き方ぐらいは知っておこうかなと思う. とはいえあんまり頑張ると途方もないので最低限に絞る. テストされる側のプログラム package main func english() string { return "Hello, w…

Ubuntuにgo-langを入れる

多少古くてもバージョンが気にならない方は以下で. $ sudo apt-get install golang 若い言語だし,一応最新で試してみたかったので公式のバイナリを入れた. 1.公式からダウンロード 2.展開して配置 $ sudo tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz 3…