Skip to content

Commit c6fdb9f

Browse files
committed
Add exp_constraints.go
1 parent 9bf228c commit c6fdb9f

File tree

5 files changed

+72
-6
lines changed

5 files changed

+72
-6
lines changed

examples/generics/examples.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generics
22

33
import (
4+
"github.com/devlights/try-golang/examples/generics/exp_constraints"
45
"github.com/devlights/try-golang/examples/generics/typeconstraints"
56
"github.com/devlights/try-golang/examples/generics/typeparameters"
67
"github.com/devlights/try-golang/mapping"
@@ -20,4 +21,5 @@ func NewRegister() mapping.Register {
2021
func (r *register) Regist(m mapping.ExampleMapping) {
2122
typeparameters.NewRegister().Regist(m)
2223
typeconstraints.NewRegister().Regist(m)
24+
exp_constraints.NewRegister().Regist(m)
2325
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package exp_constraints
2+
3+
import (
4+
"github.com/devlights/try-golang/mapping"
5+
)
6+
7+
type (
8+
register struct{}
9+
)
10+
11+
// NewRegister は、generics パッケージ用の lib.Register を返します.
12+
func NewRegister() mapping.Register {
13+
r := new(register)
14+
return r
15+
}
16+
17+
// Regist は、generics パッケージ配下に存在するサンプルを登録します.
18+
func (r *register) Regist(m mapping.ExampleMapping) {
19+
m["generics_exp_constraints"] = Constraints
20+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package exp_constraints
2+
3+
import (
4+
"github.com/devlights/gomy/output"
5+
"golang.org/x/exp/constraints"
6+
)
7+
8+
type myStr string
9+
10+
func add[E constraints.Signed](x, y E) E {
11+
return x + y
12+
}
13+
14+
func less[E constraints.Ordered](x, y E) bool {
15+
return x < y
16+
}
17+
18+
// Constraints -- Go 1.18 リリース時には含まれなかった制約型が定義されている golang.org/x/exp/constraints パッケージのサンプルです。
19+
func Constraints() error {
20+
//
21+
// constraints パッケージには、Go 1.18 リリース時には
22+
// 含まれなかった制約型が定義されている。
23+
//
24+
// - Complex
25+
// - Float
26+
// - Integer
27+
// - Ordered
28+
// - Signed
29+
// - Unsigned
30+
//
31+
// 特に Ordered は助かる。
32+
//
33+
output.Stdoutl("[Signed]", add(int32(1), int32(3)))
34+
output.Stdoutl("[Signed]", add(int8(1), int8(-2)))
35+
36+
output.Stdoutl("[Ordered]", less(1, 2))
37+
output.Stdoutl("[Ordered]", less("z", "b"))
38+
output.Stdoutl("[Ordered]", less(myStr("b"), myStr("z")))
39+
40+
return nil
41+
}

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ go 1.18
55
require (
66
github.com/devlights/gomy v0.4.6
77
golang.org/x/crypto v0.0.0-20220214200702-86341886e292
8+
golang.org/x/exp v0.0.0-20220518171630-0b5c67f07fdf
89
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
9-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
10+
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171
1011
golang.org/x/text v0.3.7
1112
gopkg.in/yaml.v2 v2.4.0
1213
)
1314

14-
require golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect
15+
require golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect

go.sum

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ github.com/devlights/gomy v0.4.6 h1:S/UiHgNF1/dF/MRhxgOT1Bsd5i33/Ly9qOSePU3Q7KU=
22
github.com/devlights/gomy v0.4.6/go.mod h1:s6/L0jEn7J/F1bIRNu3nkf+Lz/n24RClTxD76DhqGEU=
33
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE=
44
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
5+
golang.org/x/exp v0.0.0-20220518171630-0b5c67f07fdf h1:oXVg4h2qJDd9htKxb5SCpFBHLipW6hXmL3qpUixS2jw=
6+
golang.org/x/exp v0.0.0-20220518171630-0b5c67f07fdf/go.mod h1:yh0Ynu2b5ZUe3MQfp2nM0ecK7wsgouWTDN0FNeJuIys=
57
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
68
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
7-
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
8-
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
10-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
9+
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
10+
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11+
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8=
12+
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
1113
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
1214
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
1315
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

0 commit comments

Comments
 (0)