golang编码转换,支持多种数据结构

package tools

import (
   "bytes"
   "golang.org/x/text/encoding/simplifiedchinese"
   "golang.org/x/text/transform"
   "io/ioutil"
)

type EncodeConversion struct {

}

func (e EncodeConversion) Conversion(data interface{}, t transform.Transformer) interface{} {
   switch data.(type) {
   case string:
      r := transform.NewReader(bytes.NewBufferString(data.(string)), t)
      b, err := ioutil.ReadAll(r)
      if err == nil {
         data = string(b)
      }
      return data
   case []string:
      arr := data.([]string)
      for k, v := range arr {
         arr[k] = e.Conversion(v, t).(string)
      }
      data = arr
   case map[int64]string:
      arr := data.(map[int64]string)
      for k, v := range arr {
         arr[k] = e.Conversion(v, t).(string)
      }
      data = arr
   case map[int64]interface{}:
      arr := data.(map[int64]interface{})
      for k, v := range arr {
         arr[k] = e.Conversion(v, t).(interface{})
      }
      data = arr
   case map[string]string:
      arr := data.(map[string]string)
      for k, v := range arr {
         arr[k] = e.Conversion(v, t).(string)
      }
      data = arr
   case map[string]interface{}:
      arr := data.(map[string]interface{})
      for k, v := range arr {
         arr[k] = e.Conversion(v, t).(interface{})
      }
      data = arr
   }
   return data
}

func (e EncodeConversion) ToGBK (data interface{}) interface{} {
   return e.Conversion(data, simplifiedchinese.GBK.NewEncoder())
}

func (e EncodeConversion) ToUTF8 (data interface{}) interface{} {
   return e.Conversion(data, simplifiedchinese.GBK.NewDecoder())
}