123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // ⚡️ Fiber is an Express inspired web framework written in Go with ☕️
- // 🤖 Github Repository: https://github.com/gofiber/fiber
- // 📌 API Documentation: https://docs.gofiber.io
- package utils
- import (
- "fmt"
- "reflect"
- "strconv"
- "strings"
- "time"
- )
- // CopyString copies a string to make it immutable
- func CopyString(s string) string {
- return string(UnsafeBytes(s))
- }
- // CopyBytes copies a slice to make it immutable
- func CopyBytes(b []byte) []byte {
- tmp := make([]byte, len(b))
- copy(tmp, b)
- return tmp
- }
- const (
- uByte = 1 << (10 * iota) // 1 << 10 == 1024
- uKilobyte
- uMegabyte
- uGigabyte
- uTerabyte
- uPetabyte
- uExabyte
- )
- // ByteSize returns a human-readable byte string of the form 10M, 12.5K, and so forth.
- // The unit that results in the smallest number greater than or equal to 1 is always chosen.
- func ByteSize(bytes uint64) string {
- unit := ""
- value := float64(bytes)
- switch {
- case bytes >= uExabyte:
- unit = "EB"
- value /= uExabyte
- case bytes >= uPetabyte:
- unit = "PB"
- value /= uPetabyte
- case bytes >= uTerabyte:
- unit = "TB"
- value /= uTerabyte
- case bytes >= uGigabyte:
- unit = "GB"
- value /= uGigabyte
- case bytes >= uMegabyte:
- unit = "MB"
- value /= uMegabyte
- case bytes >= uKilobyte:
- unit = "KB"
- value /= uKilobyte
- case bytes >= uByte:
- unit = "B"
- default:
- return "0B"
- }
- result := strconv.FormatFloat(value, 'f', 1, 64)
- result = strings.TrimSuffix(result, ".0")
- return result + unit
- }
- // ToString Change arg to string
- func ToString(arg interface{}, timeFormat ...string) string {
- tmp := reflect.Indirect(reflect.ValueOf(arg)).Interface()
- switch v := tmp.(type) {
- case int:
- return strconv.Itoa(v)
- case int8:
- return strconv.FormatInt(int64(v), 10)
- case int16:
- return strconv.FormatInt(int64(v), 10)
- case int32:
- return strconv.FormatInt(int64(v), 10)
- case int64:
- return strconv.FormatInt(v, 10)
- case uint:
- return strconv.Itoa(int(v))
- case uint8:
- return strconv.FormatInt(int64(v), 10)
- case uint16:
- return strconv.FormatInt(int64(v), 10)
- case uint32:
- return strconv.FormatInt(int64(v), 10)
- case uint64:
- return strconv.FormatInt(int64(v), 10)
- case string:
- return v
- case []byte:
- return string(v)
- case bool:
- return strconv.FormatBool(v)
- case float32:
- return strconv.FormatFloat(float64(v), 'f', -1, 32)
- case float64:
- return strconv.FormatFloat(v, 'f', -1, 64)
- case time.Time:
- if len(timeFormat) > 0 {
- return v.Format(timeFormat[0])
- }
- return v.Format("2006-01-02 15:04:05")
- case reflect.Value:
- return ToString(v.Interface(), timeFormat...)
- case fmt.Stringer:
- return v.String()
- default:
- return ""
- }
- }
|