かまたま日記3

プログラミングメイン、たまに日常

golang

t.Runでネストしたテストを実行するときの注意点

TL; DR t.Run でネストしたテストを実行する時、Runに渡す関数はトップレベルのテストが実行されているのと別のgoroutineで実行されているのでParameterized Testなんかをやってる場合、変数のスコープに注意しましょう。

Goでtesting.T#Helperを使う

Goのテストでヘルパーメソッドを作って共通のアサーションを定義することがあるかと思います。 package test import "testing" func Add(x, y int) int { return x + y } func TestAdd(t *testing.T) { AssertEquals(t, 2, Add(1, 1)) AssertEquals(t, 3, Ad…

Datadog LogsをCLIでtailするツールを作った

github.com モチベーションとしては、Datadog LogsのWebコンソールはメッセージの全文が長いと全部表示されなかったり普通のtailと違って時間の降順に並んだりで微妙に見づらかったりするので、CLIでtail -fコマンド感覚で見れて雑にgrepとかしたいと思って…

GolangでForループの中でdeferしない

defer はそれが定義された関数が終わったタイミングで実行されるので、forループでdeferを定義してしまうと、forループが終わって所属する関数が終わったタイミングで一斉に実行される。 package main import "fmt" func main() { for i := 1; i <= 5; i++ {…

Goで複数バージョンを管理する

(2021.10 更新) まあここに書いてることそのままなのですが、日本語のメモとして。 go install でダウンロード用のバイナリを取ってきて、downloadコマンドを打つ $ go install golang.org/dl/go1.17.1@latest $ go1.17.1 download Downloaded 0.0% ( 16384 …

Golangのポインタの概念を深める

golangをちょっといじってます。 今まで使ったことがある言語(Java, Ruby, JavaScriptなど)には無かったポインタについて 色々実行してみた結果を張っておきます。 考察 あるオブジェクトを変数に入れるとコピー的なものが作成され、元の変数には影響を与え…