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を取得できることを知った。