@@ -7,9 +7,10 @@ import (
7
7
)
8
8
9
9
// Validate is a helper that creates an error when a condition is not met.
10
+ // Play: https://go.dev/play/p/vPyh51XpCBt
10
11
func Validate (ok bool , format string , args ... any ) error {
11
12
if ! ok {
12
- return errors .New (fmt .Sprint (format , args ))
13
+ return errors .New (fmt .Sprintf (format , args ... ))
13
14
}
14
15
return nil
15
16
}
@@ -59,46 +60,54 @@ func must(err any, messageArgs ...interface{}) {
59
60
60
61
// Must is a helper that wraps a call to a function returning a value and an error
61
62
// and panics if err is error or false.
63
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
62
64
func Must [T any ](val T , err any , messageArgs ... interface {}) T {
63
65
must (err , messageArgs ... )
64
66
return val
65
67
}
66
68
67
69
// Must0 has the same behavior than Must, but callback returns no variable.
70
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
68
71
func Must0 (err any , messageArgs ... interface {}) {
69
72
must (err , messageArgs ... )
70
73
}
71
74
72
75
// Must1 is an alias to Must
76
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
73
77
func Must1 [T any ](val T , err any , messageArgs ... interface {}) T {
74
78
return Must (val , err , messageArgs ... )
75
79
}
76
80
77
81
// Must2 has the same behavior than Must, but callback returns 2 variables.
82
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
78
83
func Must2 [T1 any , T2 any ](val1 T1 , val2 T2 , err any , messageArgs ... interface {}) (T1 , T2 ) {
79
84
must (err , messageArgs ... )
80
85
return val1 , val2
81
86
}
82
87
83
88
// Must3 has the same behavior than Must, but callback returns 3 variables.
89
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
84
90
func Must3 [T1 any , T2 any , T3 any ](val1 T1 , val2 T2 , val3 T3 , err any , messageArgs ... interface {}) (T1 , T2 , T3 ) {
85
91
must (err , messageArgs ... )
86
92
return val1 , val2 , val3
87
93
}
88
94
89
95
// Must4 has the same behavior than Must, but callback returns 4 variables.
96
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
90
97
func Must4 [T1 any , T2 any , T3 any , T4 any ](val1 T1 , val2 T2 , val3 T3 , val4 T4 , err any , messageArgs ... interface {}) (T1 , T2 , T3 , T4 ) {
91
98
must (err , messageArgs ... )
92
99
return val1 , val2 , val3 , val4
93
100
}
94
101
95
102
// Must5 has the same behavior than Must, but callback returns 5 variables.
103
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
96
104
func Must5 [T1 any , T2 any , T3 any , T4 any , T5 any ](val1 T1 , val2 T2 , val3 T3 , val4 T4 , val5 T5 , err any , messageArgs ... interface {}) (T1 , T2 , T3 , T4 , T5 ) {
97
105
must (err , messageArgs ... )
98
106
return val1 , val2 , val3 , val4 , val5
99
107
}
100
108
101
109
// Must6 has the same behavior than Must, but callback returns 6 variables.
110
+ // Play: https://go.dev/play/p/TMoWrRp3DyC
102
111
func Must6 [T1 any , T2 any , T3 any , T4 any , T5 any , T6 any ](val1 T1 , val2 T2 , val3 T3 , val4 T4 , val5 T5 , val6 T6 , err any , messageArgs ... interface {}) (T1 , T2 , T3 , T4 , T5 , T6 ) {
103
112
must (err , messageArgs ... )
104
113
return val1 , val2 , val3 , val4 , val5 , val6
@@ -123,6 +132,7 @@ func Try(callback func() error) (ok bool) {
123
132
}
124
133
125
134
// Try0 has the same behavior than Try, but callback returns no variable.
135
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
126
136
func Try0 (callback func ()) bool {
127
137
return Try (func () error {
128
138
callback ()
@@ -131,11 +141,13 @@ func Try0(callback func()) bool {
131
141
}
132
142
133
143
// Try1 is an alias to Try.
134
- func Try1 [T any ](callback func () error ) bool {
144
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
145
+ func Try1 (callback func () error ) bool {
135
146
return Try (callback )
136
147
}
137
148
138
149
// Try2 has the same behavior than Try, but callback returns 2 variables.
150
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
139
151
func Try2 [T any ](callback func () (T , error )) bool {
140
152
return Try (func () error {
141
153
_ , err := callback ()
@@ -144,6 +156,7 @@ func Try2[T any](callback func() (T, error)) bool {
144
156
}
145
157
146
158
// Try3 has the same behavior than Try, but callback returns 3 variables.
159
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
147
160
func Try3 [T , R any ](callback func () (T , R , error )) bool {
148
161
return Try (func () error {
149
162
_ , _ , err := callback ()
@@ -152,6 +165,7 @@ func Try3[T, R any](callback func() (T, R, error)) bool {
152
165
}
153
166
154
167
// Try4 has the same behavior than Try, but callback returns 4 variables.
168
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
155
169
func Try4 [T , R , S any ](callback func () (T , R , S , error )) bool {
156
170
return Try (func () error {
157
171
_ , _ , _ , err := callback ()
@@ -160,6 +174,7 @@ func Try4[T, R, S any](callback func() (T, R, S, error)) bool {
160
174
}
161
175
162
176
// Try5 has the same behavior than Try, but callback returns 5 variables.
177
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
163
178
func Try5 [T , R , S , Q any ](callback func () (T , R , S , Q , error )) bool {
164
179
return Try (func () error {
165
180
_ , _ , _ , _ , err := callback ()
@@ -168,6 +183,7 @@ func Try5[T, R, S, Q any](callback func() (T, R, S, Q, error)) bool {
168
183
}
169
184
170
185
// Try6 has the same behavior than Try, but callback returns 6 variables.
186
+ // Play: https://go.dev/play/p/mTyyWUvn9u4
171
187
func Try6 [T , R , S , Q , U any ](callback func () (T , R , S , Q , U , error )) bool {
172
188
return Try (func () error {
173
189
_ , _ , _ , _ , _ , err := callback ()
@@ -176,11 +192,13 @@ func Try6[T, R, S, Q, U any](callback func() (T, R, S, Q, U, error)) bool {
176
192
}
177
193
178
194
// TryOr has the same behavior than Must, but returns a default value in case of error.
195
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
179
196
func TryOr [A any ](callback func () (A , error ), fallbackA A ) (A , bool ) {
180
197
return TryOr1 (callback , fallbackA )
181
198
}
182
199
183
200
// TryOr1 has the same behavior than Must, but returns a default value in case of error.
201
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
184
202
func TryOr1 [A any ](callback func () (A , error ), fallbackA A ) (A , bool ) {
185
203
ok := false
186
204
@@ -196,6 +214,7 @@ func TryOr1[A any](callback func() (A, error), fallbackA A) (A, bool) {
196
214
}
197
215
198
216
// TryOr2 has the same behavior than Must, but returns a default value in case of error.
217
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
199
218
func TryOr2 [A any , B any ](callback func () (A , B , error ), fallbackA A , fallbackB B ) (A , B , bool ) {
200
219
ok := false
201
220
@@ -212,6 +231,7 @@ func TryOr2[A any, B any](callback func() (A, B, error), fallbackA A, fallbackB
212
231
}
213
232
214
233
// TryOr3 has the same behavior than Must, but returns a default value in case of error.
234
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
215
235
func TryOr3 [A any , B any , C any ](callback func () (A , B , C , error ), fallbackA A , fallbackB B , fallbackC C ) (A , B , C , bool ) {
216
236
ok := false
217
237
@@ -229,6 +249,7 @@ func TryOr3[A any, B any, C any](callback func() (A, B, C, error), fallbackA A,
229
249
}
230
250
231
251
// TryOr4 has the same behavior than Must, but returns a default value in case of error.
252
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
232
253
func TryOr4 [A any , B any , C any , D any ](callback func () (A , B , C , D , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D ) (A , B , C , D , bool ) {
233
254
ok := false
234
255
@@ -247,6 +268,7 @@ func TryOr4[A any, B any, C any, D any](callback func() (A, B, C, D, error), fal
247
268
}
248
269
249
270
// TryOr5 has the same behavior than Must, but returns a default value in case of error.
271
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
250
272
func TryOr5 [A any , B any , C any , D any , E any ](callback func () (A , B , C , D , E , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D , fallbackE E ) (A , B , C , D , E , bool ) {
251
273
ok := false
252
274
@@ -266,6 +288,7 @@ func TryOr5[A any, B any, C any, D any, E any](callback func() (A, B, C, D, E, e
266
288
}
267
289
268
290
// TryOr6 has the same behavior than Must, but returns a default value in case of error.
291
+ // Play: https://go.dev/play/p/B4F7Wg2Zh9X
269
292
func TryOr6 [A any , B any , C any , D any , E any , F any ](callback func () (A , B , C , D , E , F , error ), fallbackA A , fallbackB B , fallbackC C , fallbackD D , fallbackE E , fallbackF F ) (A , B , C , D , E , F , bool ) {
270
293
ok := false
271
294
@@ -286,6 +309,7 @@ func TryOr6[A any, B any, C any, D any, E any, F any](callback func() (A, B, C,
286
309
}
287
310
288
311
// TryWithErrorValue has the same behavior than Try, but also returns value passed to panic.
312
+ // Play: https://go.dev/play/p/Kc7afQIT2Fs
289
313
func TryWithErrorValue (callback func () error ) (errorValue any , ok bool ) {
290
314
ok = true
291
315
@@ -306,20 +330,23 @@ func TryWithErrorValue(callback func() error) (errorValue any, ok bool) {
306
330
}
307
331
308
332
// TryCatch has the same behavior than Try, but calls the catch function in case of error.
333
+ // Play: https://go.dev/play/p/PnOON-EqBiU
309
334
func TryCatch (callback func () error , catch func ()) {
310
335
if ! Try (callback ) {
311
336
catch ()
312
337
}
313
338
}
314
339
315
340
// TryCatchWithErrorValue has the same behavior than TryWithErrorValue, but calls the catch function in case of error.
341
+ // Play: https://go.dev/play/p/8Pc9gwX_GZO
316
342
func TryCatchWithErrorValue (callback func () error , catch func (any )) {
317
343
if err , ok := TryWithErrorValue (callback ); ! ok {
318
344
catch (err )
319
345
}
320
346
}
321
347
322
348
// ErrorsAs is a shortcut for errors.As(err, &&T).
349
+ // Play: https://go.dev/play/p/8wk5rH8UfrE
323
350
func ErrorsAs [T error ](err error ) (T , bool ) {
324
351
var t T
325
352
ok := errors .As (err , & t )
0 commit comments