string.go 697 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package serial
  2. import (
  3. "fmt"
  4. "strings"
  5. "v2ray.com/core/common/buf"
  6. )
  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) buf.BytesWriter {
  34. return func(b []byte) int {
  35. copy(b, []byte(s))
  36. return len(s)
  37. }
  38. }