Skip to content

Commit ca75c73

Browse files
committed
泛型
1 parent 6440347 commit ca75c73

File tree

2 files changed

+166
-1
lines changed

2 files changed

+166
-1
lines changed

go.mod

Lines changed: 133 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/hwholiday/learning_tools
22

3-
go 1.16
3+
go 1.18
44

55
replace google.golang.org/grpc v1.40.0 => google.golang.org/grpc v1.27.0
66

@@ -65,6 +65,138 @@ require (
6565
gorm.io/gorm v1.22.3
6666
)
6767

68+
require (
69+
github.com/KyleBanks/depth v1.2.1 // indirect
70+
github.com/PuerkitoBio/purell v1.1.1 // indirect
71+
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
72+
github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect
73+
github.com/andybalholm/cascadia v1.3.1 // indirect
74+
github.com/armon/go-metrics v0.3.9 // indirect
75+
github.com/beorn7/perks v1.0.1 // indirect
76+
github.com/cespare/xxhash/v2 v2.1.2 // indirect
77+
github.com/cheekybits/genny v1.0.0 // indirect
78+
github.com/coreos/etcd v3.3.17+incompatible // indirect
79+
github.com/coreos/go-semver v0.3.0 // indirect
80+
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect
81+
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
82+
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
83+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect
84+
github.com/davecgh/go-spew v1.1.1 // indirect
85+
github.com/eapache/go-resiliency v1.2.0 // indirect
86+
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
87+
github.com/eapache/queue v1.1.0 // indirect
88+
github.com/gin-contrib/sse v0.1.0 // indirect
89+
github.com/go-kit/log v0.2.0 // indirect
90+
github.com/go-log/log v0.1.0 // indirect
91+
github.com/go-logfmt/logfmt v0.5.1 // indirect
92+
github.com/go-logr/logr v1.2.0 // indirect
93+
github.com/go-openapi/jsonpointer v0.19.5 // indirect
94+
github.com/go-openapi/jsonreference v0.19.5 // indirect
95+
github.com/go-openapi/spec v0.20.3 // indirect
96+
github.com/go-openapi/swag v0.19.14 // indirect
97+
github.com/go-playground/locales v0.13.0 // indirect
98+
github.com/go-playground/universal-translator v0.17.0 // indirect
99+
github.com/go-playground/validator/v10 v10.4.1 // indirect
100+
github.com/go-stack/stack v1.8.0 // indirect
101+
github.com/go-zookeeper/zk v1.0.2 // indirect
102+
github.com/gogo/protobuf v1.3.2 // indirect
103+
github.com/golang/snappy v0.0.4 // indirect
104+
github.com/google/btree v1.0.1 // indirect
105+
github.com/google/go-cmp v0.5.6 // indirect
106+
github.com/google/gofuzz v1.1.0 // indirect
107+
github.com/googleapis/gnostic v0.5.5 // indirect
108+
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
109+
github.com/hashicorp/errwrap v1.0.0 // indirect
110+
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
111+
github.com/hashicorp/go-msgpack v1.1.5 // indirect
112+
github.com/hashicorp/go-multierror v1.1.0 // indirect
113+
github.com/hashicorp/go-sockaddr v1.0.0 // indirect
114+
github.com/hashicorp/go-uuid v1.0.2 // indirect
115+
github.com/hashicorp/golang-lru v0.5.4 // indirect
116+
github.com/hashicorp/hcl v1.0.0 // indirect
117+
github.com/imdario/mergo v0.3.8 // indirect
118+
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
119+
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
120+
github.com/jcmturner/gofork v1.0.0 // indirect
121+
github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect
122+
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
123+
github.com/jinzhu/inflection v1.0.0 // indirect
124+
github.com/jinzhu/now v1.1.2 // indirect
125+
github.com/josharian/intern v1.0.0 // indirect
126+
github.com/json-iterator/go v1.1.12 // indirect
127+
github.com/jtolds/gls v4.20.0+incompatible // indirect
128+
github.com/klauspost/compress v1.13.6 // indirect
129+
github.com/leodido/go-urn v1.2.0 // indirect
130+
github.com/lib/pq v1.10.4 // indirect
131+
github.com/lucas-clemente/quic-go v0.13.1 // indirect
132+
github.com/magiconair/properties v1.8.5 // indirect
133+
github.com/mailru/easyjson v0.7.6 // indirect
134+
github.com/marten-seemann/chacha20 v0.2.0 // indirect
135+
github.com/marten-seemann/qtls v0.4.1 // indirect
136+
github.com/mattn/go-isatty v0.0.14 // indirect
137+
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
138+
github.com/micro/mdns v0.3.0 // indirect
139+
github.com/miekg/dns v1.1.43 // indirect
140+
github.com/mitchellh/go-homedir v1.1.0 // indirect
141+
github.com/mitchellh/hashstructure v1.0.0 // indirect
142+
github.com/mitchellh/mapstructure v1.4.2 // indirect
143+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
144+
github.com/modern-go/reflect2 v1.0.2 // indirect
145+
github.com/nats-io/nats-server/v2 v2.6.5 // indirect
146+
github.com/nats-io/nats.go v1.13.1-0.20211018182449-f2416a8b1483 // indirect
147+
github.com/nats-io/nkeys v0.3.0 // indirect
148+
github.com/nats-io/nuid v1.0.1 // indirect
149+
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect
150+
github.com/pelletier/go-toml v1.9.4 // indirect
151+
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
152+
github.com/prometheus/client_model v0.2.0 // indirect
153+
github.com/prometheus/common v0.30.0 // indirect
154+
github.com/prometheus/procfs v0.7.3 // indirect
155+
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
156+
github.com/russross/blackfriday/v2 v2.0.1 // indirect
157+
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
158+
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
159+
github.com/sirupsen/logrus v1.8.1 // indirect
160+
github.com/smartystreets/assertions v1.2.0 // indirect
161+
github.com/spf13/afero v1.6.0 // indirect
162+
github.com/spf13/cast v1.4.1 // indirect
163+
github.com/spf13/jwalterweatherman v1.1.0 // indirect
164+
github.com/spf13/pflag v1.0.5 // indirect
165+
github.com/subosito/gotenv v1.2.0 // indirect
166+
github.com/ugorji/go/codec v1.1.7 // indirect
167+
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
168+
github.com/xdg-go/scram v1.0.2 // indirect
169+
github.com/xdg-go/stringprep v1.0.2 // indirect
170+
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
171+
go.etcd.io/etcd/client/pkg/v3 v3.5.1 // indirect
172+
go.opentelemetry.io/otel v1.0.1 // indirect
173+
go.opentelemetry.io/otel/trace v1.0.1 // indirect
174+
go.uber.org/atomic v1.9.0 // indirect
175+
go.uber.org/multierr v1.7.0 // indirect
176+
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect
177+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
178+
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c // indirect
179+
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
180+
golang.org/x/text v0.3.7 // indirect
181+
golang.org/x/tools v0.1.5 // indirect
182+
google.golang.org/appengine v1.6.7 // indirect
183+
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect
184+
gopkg.in/fsnotify.v1 v1.4.7 // indirect
185+
gopkg.in/inf.v0 v0.9.1 // indirect
186+
gopkg.in/ini.v1 v1.63.2 // indirect
187+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
188+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
189+
k8s.io/klog/v2 v2.30.0 // indirect
190+
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
191+
k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b // indirect
192+
modernc.org/b v1.0.0 // indirect
193+
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
194+
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
195+
sigs.k8s.io/yaml v1.2.0 // indirect
196+
xorm.io/builder v0.3.6 // indirect
197+
xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb // indirect
198+
)
199+
68200
require (
69201
github.com/apolloconfig/agollo/v4 v4.0.11
70202
github.com/nats-io/nats-streaming-server v0.23.2 // indirect

other/t_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type Num interface {
9+
int64 | float64
10+
}
11+
12+
func TestT(t *testing.T) {
13+
ints := map[string]int64{
14+
"first": 34,
15+
"second": 12,
16+
}
17+
fmt.Println(SumIntsOrFloats[string, int64](ints))
18+
fmt.Println(SumNum(ints))
19+
}
20+
func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V {
21+
var s V
22+
for _, v := range m {
23+
s += v
24+
}
25+
return s
26+
}
27+
func SumNum[K comparable, V Num](m map[K]V) V {
28+
var s V
29+
for _, v := range m {
30+
s += v
31+
}
32+
return s
33+
}

0 commit comments

Comments
 (0)