週報(08/14~08/20)

Go

1.21でリリースされた新しいパッケージである maps パッケージと、sync パッケージの変更点を押さえた。

maps パッケージの Clone メソッドのコメントにある shallow clone の意味が理解できなかったので go-nuts で質問して把握した。

生成される map は元の map と別の HashMap を参照するが、コピーされたValueがシャローコピーされるということらしい。つまりValueに参照型の値が含まれる場合は、該当する値はシャローコピーされて生成された map の方でValueで値の更新をすると元の map の同じKeyのValueにも影響する。

sync パッケージに追加された、3つの関数は sync.Once をいい感じにラップしている。生成された関数の初回実行時に panic が発生した場合は、以降の実行でも panic になる。

sync.Once についても改めて調査して、ゴルーチンセーフにするための仕組みを知った。Once をコピーして使ってはいけないのは、プライベートフィールドであるsync.Mutexの値が共有されないからであることを知って納得した。

MySQL

クロス集計なるものを知った。with rollupでグルーピングした集計結果の集計結果を取得できることを知った。

採番テーブルを用意してLAST_INSERT_IDを取得することで、DBにIDを採番させてアプリケーション側でIDを取得できることを知った。