Go 1.21 リリース
こんにちは。CURUCURU エンジニアの兄山です。 今回は Golang1.21 に関してまとめていきたいと思います。
Golang1.21 がリリースされたということで早速触ってみました
slog
従来の log はテキストメッセージしか表示されないので、ログ調査したい場合に多少不便でした。なのでアプリケーションで使用する際は zap 等のライブラリを入れる必要がありました。
しかし標準のパッケージでslog
が導入されたことにより上記不便を解消してくれました。
また JSON 形式で出力したりできるので、複雑なログでもまとめて確認できます。
package main
import (
"log"
)
func main() {
log.Print("This is log!!")
}
結果
2009/11/10 23:00:00 This is log!!
package main
import (
"log/slog"
"os"
)
func main() {
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info(
"This is log!",
"id", 1,
"metod", "GET",
"path", "/curucuru/get",
"status", 200,
)
}
結果
{"time":"2009-11-10T23:00:00Z","level":"INFO","msg":"This is log!","id":1,"metod":"GET","path":"/curucuru/get","status":200}
slices
個人的には欲しいなと思っていた機能でしたので嬉しかったです。
簡単にいうとスライスをいい感じに処理してくれるパッケージです。
これまでは、スライスの処理はfor
やrange
で処理を行うので for 文が散乱していました。(表現の自由度が低いのは Go のいいところなのですが、簡単な Map 処理等は欲しいと思っていた)
例えば配列から重複を削除したい場合、これまでは以下のように実装していましたが Golang1.21 ではslices.Compact(arr)
とすれば一発で処理できます。
package main
import "fmt"
func main() {
arr := []string{"a", "b", "c", "c", "c"}
set := make([]string, 0, len(arr))
match := map[string]bool{}
for i := 0; i < len(arr); i++ {
if !match[arr[i]] {
match[arr[i]] = true
set = append(set, arr[i])
}
}
fmt.Print(set)
結果
[a b c]
}
package main
import (
"fmt"
"slices"
)
func main() {
arr := []string{"a", "b", "c", "c", "c"}
set := slices.Compact(arr)
fmt.Println(set)
結果
[a b c]
}
またスライスの最大値を抽出するslices.Max(arr)
や、スライスの要素が等しいか判定するslices.Equal(arr)
等、他にも便利そうなメソッドがあります。
まだまだ便利そうなパッケージがありそうなので今後も注視していきたいと思います。