関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。
Go 1.22 で、cmp.Or
という関数が追加されていたのですね。知らなかったです。
引数に指定した値の中で、最初にゼロ値ではない値を返してくれます。これ便利ですねー。痒いところに手が届く系の関数。
無くても困らないのですが、あるとちょっと処理が楽出来るようになるので便利。
複合キーでソート処理書くときもちょっと楽になりますね。
サンプル
package cmpop import ( "cmp" "github.com/devlights/gomy/output" ) // Or は、cmp.Or[T comparable]() のサンプルです。 // cmp.Or は、Go 1.22 で追加されました。 // // > Or returns the first of its arguments that is not equal to the zero value. If no argument is non-zero, it returns the zero value. // // > (Orは、引数のうちゼロ値ではない最初の引数を返す。どの引数もゼロ値ではない場合、ゼロ値を返す。) // // comparableが対象となるので、以下に対して利用できる。 // // - booleans // - numbers // - strings // - pointers // - channels // - arrays of comparable types // - structs whose fields are all comparable types // // # REFERENCES // - https://pkg.go.dev/cmp#Or // - https://pkg.go.dev/builtin#comparable // - https://blog.carlana.net/post/2024/golang-cmp-or-uses-and-history/ func Or() error { type ( V struct { Val int } ) var ( ints = []int{0, 0, 99, 1, 0} strs = []string{"", "hello", "world", ""} objs = []*V{nil, {999}, nil} ) output.Stdoutl("[non-zero]", cmp.Or(ints...)) output.Stdoutl("[non-zero]", cmp.Or(strs...)) output.Stdoutl("[non-zero]", cmp.Or(objs...)) return nil }
try-golang/examples/basic/cmpop/or.go at main · devlights/try-golang · GitHub
実行すると以下のようになります。
$ task task: [build] go build . task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: cmpop_or [Name] "cmpop_or" [non-zero] 99 [non-zero] hello [non-zero] &{999} [Elapsed] 45.16µs
参考情報
https://pkg.go.dev/cmp#example-Or
https://pkg.go.dev/cmp#example-Or-Sort
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。