右上➚

プログラミングに関するメモをのこしていきます

golang

golang でテストのために時間を操作するライブラリ timejump

現在時刻に依存するコードをテストするとき,golang で time.Now を普通に使っているとモックできずうまくテストが書けないという問題があります. 時間の操作は time パッケージをそのまま使えば良いのですが,time.Now だけはモックできるようにしたいとこ…

go generate する時のバイナリのバージョンを固定したい

https://github.com/golang/mock は mockgen というコマンドを提供しています. これは,interface から mock を自動生成するコマンドで go generate と合わせて使うと interface に追従する mock がとても簡単に作れます. 他にも yacc とかリソースをバイ…

BK-tree を golang で実装した

先日はてぶに 興味深いデータ構造:BK木 | プログラミング | POSTD という翻訳記事 ( 元記事 http://signal-to-noise.xyz/post/bk-tree/) があがっているのをみて初めて BK-tree というものを知ったので,golang で実装してみました. github.com BK-tree と…

日本語の改行を適当にいい感じにするツールを作りました

必要に迫られて、HTML ページ内の改行位置をいい感じにするツールを作ってみました。 github.com HTMLに長文を書くと、親 DOM のサイズの制約上、適宜改行がぶちこまれます。 しかし、改行位置は文節を考慮などせずにごりっと挿入されるので、多くの問題が生…

値と参照について

「値」と「参照」という言葉があります。 このへんの言葉について、今の理解をまとめておこうと思います。 言葉の定義や理解が誤っている部分があればご指摘ください。 まず、前提として以下では、「値」ベースの言語として C, C++, Rust などを、「参照」ベ…

Golang での文字列連結に関するベンチマーク

まず結論 append しよう. bytes.Buffer はそんなに速くない. きっかけ こんな記事を見かけました. Goでは文字列連結はコストの高い操作 - Qiita buf += "abc" はコストが高いよーっていうお話ですね. これは golang にかぎらず, Javaとかでもよく話題になる…

Golangでechoサーバ

最近 golang が気になります golang の特徴はもはやわざわざここに書くまでも無いことだと思うので書きませんが, 気になっている理由を書いてみます. バイナリ(しかもポータビリティが非常に高いバイナリ)にコンパイルされること C/C++ には及ばずとも実行が…