123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package lang
- import (
- "fmt"
- "reflect"
- "strconv"
- )
- // Placeholder is a placeholder object that can be used globally.
- var Placeholder PlaceholderType
- type (
- // AnyType can be used to hold any type.
- AnyType = any
- // PlaceholderType represents a placeholder type.
- PlaceholderType = struct{}
- )
- // Repr returns the string representation of v.
- func Repr(v any) string {
- if v == nil {
- return ""
- }
- // if func (v *Type) String() string, we can't use Elem()
- switch vt := v.(type) {
- case fmt.Stringer:
- return vt.String()
- }
- val := reflect.ValueOf(v)
- for val.Kind() == reflect.Ptr && !val.IsNil() {
- val = val.Elem()
- }
- return reprOfValue(val)
- }
- func reprOfValue(val reflect.Value) string {
- switch vt := val.Interface().(type) {
- case bool:
- return strconv.FormatBool(vt)
- case error:
- return vt.Error()
- case float32:
- return strconv.FormatFloat(float64(vt), 'f', -1, 32)
- case float64:
- return strconv.FormatFloat(vt, 'f', -1, 64)
- case fmt.Stringer:
- return vt.String()
- case int:
- return strconv.Itoa(vt)
- case int8:
- return strconv.Itoa(int(vt))
- case int16:
- return strconv.Itoa(int(vt))
- case int32:
- return strconv.Itoa(int(vt))
- case int64:
- return strconv.FormatInt(vt, 10)
- case string:
- return vt
- case uint:
- return strconv.FormatUint(uint64(vt), 10)
- case uint8:
- return strconv.FormatUint(uint64(vt), 10)
- case uint16:
- return strconv.FormatUint(uint64(vt), 10)
- case uint32:
- return strconv.FormatUint(uint64(vt), 10)
- case uint64:
- return strconv.FormatUint(vt, 10)
- case []byte:
- return string(vt)
- default:
- return fmt.Sprint(val.Interface())
- }
- }
|