Documentation ¶
Index ¶
- func Any[T any](v *T) any
- func CompareOptional[E constraints.Ordered](a, b Optional[E]) int
- func Conv[T, S constraints.Number](v T) S
- func ConvBinary[T, S any](v T) S
- func Pointer[T any](v T) *T
- func PointerMap[M ~map[K]V, N map[K]*V, K comparable, V any](src M) N
- func PointerSlice[S ~[]E, V []*E, E any](src S) V
- func Value[T any](v *T) T
- func ValueMap[M ~map[K]*V, N map[K]V, K comparable, V any](src M) N
- func ValueSlice[S ~[]*E, V []E, E any](src S) V
- type Optional
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Any ¶ added in v1.2.91
Any returns its argument v or nil if and only if v is a typed nil or an untyped nil. For example, if v was created by set with `var p *int` or calling Any((*int)(nil)), Any returns nil.
Example ¶
package main import ( "fmt" "github.com/searKing/golang/go/exp/types" ) type stringerVal struct { s string } func (s stringerVal) String() string { return s.s } func main() { fmt.Printf("%#v\n", (*stringerVal)(nil)) // typed nil implements [fmt.Stringer] fmt.Printf("%#v\n", types.Any((*stringerVal)(nil))) }
Output: (*types_test.stringerVal)(nil) <nil>
func CompareOptional ¶ added in v1.2.77
func CompareOptional[E constraints.Ordered](a, b Optional[E]) int
func Conv ¶ added in v1.2.100
func Conv[T, S constraints.Number](v T) S
Conv converts a number[T] into an unlimited untyped number, and assigned back to number[S]. static_cast<S>(v) https://go.dev/ref/spec#Constants
Example ¶
package main import ( "fmt" "math" "github.com/searKing/golang/go/exp/types" ) func main() { fmt.Printf("%#x\n", types.Conv[int8, uint8](-1)) // overflow fmt.Printf("%d\n", types.Conv[uint8, int8](math.MaxUint8)) // overflow fmt.Printf("%d\n", types.Conv[float32, int32](-1)) fmt.Printf("%f\n", types.Conv[int32, float32](-1)) }
Output: 0xff -1 -1 -1.000000
func ConvBinary ¶ added in v1.2.100
func ConvBinary[T, S any](v T) S
ConvBinary writes a number[T] into a byte slice, and reads the byte slice into a number[S]. binary.Write( T -> []byte ) => binary.Read( []byte, S )
Example ¶
fmt.Printf("%#x\n", types.ConvBinary[int8, uint8](-1)) // overflow fmt.Printf("%d\n", types.ConvBinary[uint8, int8](math.MaxUint8)) // overflow fmt.Printf("%d\n", types.ConvBinary[float32, int32](-1)) fmt.Printf("%f\n", types.ConvBinary[int32, float32](-1082130432)) fmt.Printf("%d\n", types.ConvBinary[*stringerVal, int64]((*stringerVal)(nil))) fmt.Printf("%d\n", types.ConvBinary[*stringerVal, int64](nil))
Output: 0xff -1 -1082130432 -1.000000 0 0
func PointerMap ¶
func PointerMap[M ~map[K]V, N map[K]*V, K comparable, V any](src M) N
PointerMap converts a map of values into a map of pointers
func PointerSlice ¶
func PointerSlice[S ~[]E, V []*E, E any](src S) V
PointerSlice converts a slice of values into a slice of pointers
func Value ¶
func Value[T any](v *T) T
Value returns the value of the pointer passed in or "" if the pointer is nil.
func ValueMap ¶
func ValueMap[M ~map[K]*V, N map[K]V, K comparable, V any](src M) N
ValueMap converts a map of string pointers into a string map of values
func ValueSlice ¶
func ValueSlice[S ~[]*E, V []E, E any](src S) V
ValueSlice converts a slice of pointers into a slice of values
Types ¶
type Optional ¶ added in v1.2.77
Optional represents a Value that may be null.
func (Optional[E]) Format ¶ added in v1.2.77
Example ¶
package main import ( "fmt" "github.com/searKing/golang/go/exp/types" ) func main() { fmt.Printf("'%+v'\n", types.Optional[string]{}) fmt.Printf("'%v'\n", types.Optional[string]{}) fmt.Printf("'%s'\n", types.Optional[string]{}) fmt.Printf("'%+v'\n", types.Optional[int]{}) fmt.Printf("'%v'\n", types.Optional[int]{}) fmt.Printf("'%s'\n", types.Optional[int]{}) fmt.Printf("'%+v'\n", types.Optional[*int]{}) fmt.Printf("'%v'\n", types.Optional[*int]{}) fmt.Printf("'%s'\n", types.Optional[*int]{}) fmt.Printf("'%+v'\n", types.Opt("")) fmt.Printf("'%v'\n", types.Opt("")) fmt.Printf("'%s'\n", types.Opt("")) fmt.Printf("'%+v'\n", types.Opt(0)) fmt.Printf("'%v'\n", types.Opt(0)) fmt.Printf("'%s'\n", types.Opt(0)) fmt.Printf("'%+v'\n", types.Opt[*int](nil)) fmt.Printf("'%v'\n", types.Opt[*int](nil)) fmt.Printf("'%s'\n", types.Opt[*int](nil)) fmt.Printf("'%+v'\n", types.Opt("hello world")) fmt.Printf("'%v'\n", types.Opt("hello world")) fmt.Printf("'%s'\n", types.Opt("hello world")) fmt.Printf("'%+v'\n", types.Opt(0xFF)) fmt.Printf("'%v'\n", types.Opt(0xFF)) fmt.Printf("'%s'\n", types.Opt(0xFF)) var p int fmt.Printf("'%s'\n", fmt.Sprintf("%+v", types.Opt(&p))[:2]) fmt.Printf("'%s'\n", fmt.Sprintf("%v", types.Opt(&p))[:2]) fmt.Printf("'%s'\n", fmt.Sprintf("%s", types.Opt(&p))[:11]) }
Output: 'null string: ' 'null' 'null' 'null int: 0' 'null' 'null' 'null *int: <nil>' 'null' 'null' '' '' '' '0' '0' '%!s(int=0)' '<nil>' '<nil>' '%!s(*int=<nil>)' 'hello world' 'hello world' 'hello world' '255' '255' '%!s(int=255)' '0x' '0x' '%!s(*int=0x'
func (Optional[E]) String ¶ added in v1.2.77
Example ¶
package main import ( "fmt" "github.com/searKing/golang/go/exp/types" ) func main() { fmt.Printf("%s\n", types.Optional[string]{}.String()) fmt.Printf("%s\n", types.Optional[int]{}.String()) fmt.Printf("%s\n", types.Optional[*int]{}.String()) fmt.Printf("%s\n", types.Opt("").String()) fmt.Printf("%s\n", types.Opt(0).String()) fmt.Printf("%s\n", types.Opt[*int](nil).String()) fmt.Printf("%s\n", types.Opt("hello world").String()) fmt.Printf("%s\n", types.Opt(0xFF).String()) var p int fmt.Printf("%s\n", types.Opt(&p).String()[:2]) }
Output: null null null 0 <nil> hello world 255 0x