Go

【Go 1.21】ループ変数が共有される問題への対策(プレビュー)が公開されました

Go

TL;DR Goのfor文で宣言されるループ変数は、ループ(イテレーション)毎に同じアドレスに値が格納される仕様になっている この仕様のよってループ内で並行処理を実行するなど特定のケースで、どのループでも毎回同じ値が取得されてしまうといった意図しないバ…

【Go 1.21】愚直なループ処理から脱却できるslices/mapsパッケージ

Go

TL;DR slices・mapsパッケージによって、これまでfor文で実装するしかなかったsliceやmapなどに対する汎用処理が簡単に実装できるようになった これまでGoには継承などの共通の振る舞いを実装する仕組みが存在しなかったが、Go 1.18で導入されたジェネリクス…

Go1.20で追加された「unsafe.StringData、unsafe.String、unsafe.SliceData」による[]byteとstringの変換処理

Go

TL;DR Go1.20からメモリ効率を重視した[]byteとstringの変換処理として以下が提供されている string -> []byte:unsafe.Slice(unsafe.StringData(s), len(s)) []byte → string:unsafe.String(&b[0], len(b)) 目次 TL;DR 目次 従来の変換方法 新しい変換方法…

Echo(Golang web framework)のディレクトリ構成の参考情報 - OSS「echo-sample」のコードリーディング

Go

TL;DR echo-sampleは、こんな構成だった TL;DR きっかけ echo-sampleの概要 ディレクトリ構成 個々の構成毎の役割 main.go 役割 詳細 route 役割 詳細 middleware 役割 詳細 handler 役割 詳細 db 役割 詳細 conf 役割 詳細 api 役割 詳細 model 役割 詳細 /…