Initial commit: Go 1.23 release state
This commit is contained in:
55
test/typeparam/issue47272.go
Normal file
55
test/typeparam/issue47272.go
Normal file
@@ -0,0 +1,55 @@
|
||||
// run
|
||||
|
||||
// Copyright 2021 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Option[T any] struct {
|
||||
ok bool
|
||||
val T
|
||||
}
|
||||
|
||||
func (o Option[T]) String() string {
|
||||
if o.ok {
|
||||
return fmt.Sprintf("Some(%v)", o.val)
|
||||
}
|
||||
return "None"
|
||||
}
|
||||
|
||||
func Some[T any](val T) Option[T] { return Option[T]{ok: true, val: val} }
|
||||
func None[T any]() Option[T] { return Option[T]{ok: false} }
|
||||
|
||||
type Result[T, E any] struct {
|
||||
ok bool
|
||||
val T
|
||||
err E
|
||||
}
|
||||
|
||||
func (r Result[T, E]) String() string {
|
||||
if r.ok {
|
||||
return fmt.Sprintf("Ok(%v)", r.val)
|
||||
}
|
||||
return fmt.Sprintf("Err(%v)", r.err)
|
||||
}
|
||||
|
||||
func Ok[T, E any](val T) Result[T, E] { return Result[T, E]{ok: true, val: val} }
|
||||
func Err[T, E any](err E) Result[T, E] { return Result[T, E]{ok: false, err: err} }
|
||||
|
||||
func main() {
|
||||
a := Some[int](1)
|
||||
b := None[int]()
|
||||
fmt.Println(a, b)
|
||||
|
||||
x := Ok[int, error](1)
|
||||
y := Err[int, error](errors.New("test"))
|
||||
fmt.Println(x, y)
|
||||
// fmt.Println(x)
|
||||
_, _, _, _ = a, b, x, y
|
||||
}
|
||||
Reference in New Issue
Block a user