string.go 735 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package serial
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // ToString serialize an abitrary value into string.
  7. func ToString(v interface{}) string {
  8. if v == nil {
  9. return " "
  10. }
  11. switch value := v.(type) {
  12. case string:
  13. return value
  14. case *string:
  15. return *value
  16. case fmt.Stringer:
  17. return value.String()
  18. case error:
  19. return value.Error()
  20. case []byte:
  21. return BytesToHexString(value)
  22. default:
  23. return fmt.Sprintf("%+v", value)
  24. }
  25. }
  26. func Concat(v ...interface{}) string {
  27. values := make([]string, len(v))
  28. for i, value := range v {
  29. values[i] = ToString(value)
  30. }
  31. return strings.Join(values, "")
  32. }
  33. func WriteString(s string) func([]byte) (int, error) {
  34. return func(b []byte) (int, error) {
  35. return copy(b, []byte(s)), nil
  36. }
  37. }