栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中有效地串联字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中有效地串联字符串

新方法:

在Go 1.10+中strings.Builder,这里是。

生成器用于使用Write方法有效地构建字符串。它最大程度地减少了内存复制。零值可以使用了。

与几乎相同bytes.Buffer。

package mainimport (    "strings"    "fmt")func main() {    // ZERO-VALUE:    //    // It's ready to use from the get-go.    // You don't need to initialize it.    var str strings.Builder    for i := 0; i < 1000; i++ {        str.WriteString("a")    }    fmt.Println(str.String())}

注意

  • 不要复制StringBuilder值,因为它会缓存基础数据。
  • 如果要共享StringBuilder值,请使用指向它的指针。

支持的接口

正在考虑现有接口的情况下实现StringBuilder的方法。这样您就可以在代码中轻松切换到新的Builder类型。

  • Grow(int)-> bytes.Buffer#Grow
  • Len()int- > bytes.Buffer#Len
  • Reset()-> bytes.Buffer#Reset
  • String()字符串-> fmt.Stringer
  • Write([] byte)(int,error)-> io.Writer
  • WriteByte(byte)错误-> io.ByteWriter
  • WriteRune(rune)(int,error)-> bufio.Writer#WriteRune - bytes.Buffer#WriteRune
  • WriteString(string)(int,error)-> io.stringWriter

与bytes.Buffer的差异

  • 它只能增长或重置。

  • 它具有内置的copyCheck机制,可防止意外复制它:

  • func (b *Builder) copyCheck() { … }

  • 在中bytes.Buffer,人们可以像这样访问基础字节:(*Buffer).Bytes()。

  • strings.Builder 可以防止此问题。

  • 有时,这不是问题,而是需要的。
  • 例如:对于将字节传递给io.Readeretc 时的偷窥行为。

旧方法:

使用

bytes
包装。它具有
Buffer
实现的类型
io.Writer

package mainimport (    "bytes"    "fmt")func main() {    var buffer bytes.Buffer    for i := 0; i < 1000; i++ {        buffer.WriteString("a")    }    fmt.Println(buffer.String())}

这是在O(n)时间内完成的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号