概要
忘れないうちにメモメモ。。。便利ですね。そのうち標準ライブラリに含まれるのを希望。
サンプル
package exp_constraints import ( "github.com/devlights/gomy/output" "golang.org/x/exp/constraints" ) type myStr string func add[E constraints.Signed](x, y E) E { return x + y } func less[E constraints.Ordered](x, y E) bool { return x < y } // ExpConstraints -- Go 1.18 リリース時には含まれなかった制約型が定義されている golang.org/x/exp/constraints パッケージのサンプルです。 // // REFERENCES // - https://pkg.go.dev/golang.org/x/exp/constraints func ExpConstraints() error { // // constraints パッケージには、Go 1.18 リリース時には // 含まれなかった制約型が定義されている。 // // - Complex // - Float // - Integer // - Ordered // - Signed // - Unsigned // // 特に Ordered は助かる。 // output.Stdoutl("[Signed]", add(int32(1), int32(3))) output.Stdoutl("[Signed]", add(int8(1), int8(-2))) output.Stdoutl("[Ordered]", less(1, 2)) output.Stdoutl("[Ordered]", less("z", "b")) output.Stdoutl("[Ordered]", less(myStr("b"), myStr("z"))) return nil }
実行すると以下のような感じです。
gitpod /workspace/try-golang (master) $ task task: [run] go run . -onetime ENTER EXAMPLE NAME: exp_constraints [Name] "generics_exp_constraints" [Signed] 4 [Signed] -1 [Ordered] true [Ordered] false [Ordered] true [Elapsed] 18.251µs
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。