01
2018
09

golang 高效 string []byte相互转换 和 string连接

一、[]byte和string的互相转换

[]byte和string的普通互相强制转换会进行内存拷贝所以性能不是很好,可以Golang中的“黑科技”unsafe包来实现高效转换

//转换string为[]byte

func StringBytes(s string) []byte {

   return *(*[]byte)(unsafe.Pointer(&s)) }

//转换[]byte为string

func BytesString(b []byte) string {

   return *(*string)(unsafe.Pointer(&b)) }


二、string拼接连接

我们平时最常用也最方便的连接string方式是用+号;但每次运算都会产生一个新的字符串,所以性能比较差。

下面我分享一个我自己写的工具函数

// StringsJoin 高效连接字符串
func StringsJoin(sep string, ss ...string) string {
  l := len(sep) * len(ss)
  i := 0
  for ; i < len(ss); i++ {
    l += len(ss[i])
  }

  bs := make([]byte, l)
  l = 0
  i = 0
  for ; i < len(ss); i++ {
    copy(bs[l:], ss[i])
    l += len(ss[i])
    copy(bs[l:], sep)
    l += len(sep)
  }
  if len(sep) > 0 && len(bs) > 0 {
    bs = bs[:len(bs)-len(sep)]
  }

  return BytesString(bs)
}

转载请注明出处:https://blog.gaoge.ink/category/4.html

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。