string.go 685 B

12345678910111213141516171819202122232425262728293031323334353637383940
  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. default:
  21. return fmt.Sprintf("%+v", value)
  22. }
  23. }
  24. func Concat(v ...interface{}) string {
  25. builder := strings.Builder{}
  26. for _, value := range v {
  27. builder.WriteString(ToString(value))
  28. }
  29. return builder.String()
  30. }
  31. func WriteString(s string) func([]byte) (int, error) {
  32. return func(b []byte) (int, error) {
  33. return copy(b, []byte(s)), nil
  34. }
  35. }