当前位置: 首页 > news >正文

网站 运营威海seo优化公司

网站 运营,威海seo优化公司,西安企业管理咨询有限公司,电信ip做的网站移动不能访问Golang详解string 文章目录 Golang详解stringGolang中为什么string是只读的?stirng和[]byte的转化原理[]byte转string一定需要内存拷贝吗?字符串拼接性能测试 Golang中为什么string是只读的? 在Go语言中,string其实就是一个结构体…

Golang详解string

文章目录

  • Golang详解string
    • Golang中为什么string是只读的?
    • stirng和[]byte的转化原理
    • []byte转string一定需要内存拷贝吗?
    • 字符串拼接性能测试

Golang中为什么string是只读的?

在Go语言中,string其实就是一个结构体,包含一个指向底层数组的指针和长度。字符串只读,在Go运行时能有效的管理内存分配,在创建字符串后不可修改,那么字符串就固定在内存中了,就可以消除跟踪和管理字符串修改的复杂性了。同时,在多线程的环境下,不可变性让字符串避免数据竞争和一致性问题,不需要额外的同步处理了。

stirng和[]byte的转化原理

从string的底层结构就知道是不可扩容的,string和[]byte的区别就是在[]byte中多了个容量,所以string转[]byte和[]byte转string都是进行内存的拷贝,指针数据和长度的匹配。

[]byte转string一定需要内存拷贝吗?

如果[]byte转string是临时场景,那么就不需要内存拷贝。就比如;

  1. 字符串拼接,临时使用
  2. 查找数据,临时使用
  3. 用于比较,临时使用

字符串拼接性能测试

Golang中常用的字符串拼接:

  1. strings.Builder
  2. strings.Join
  3. (加号) +
  4. fmt.Sprintf
  5. append
package mainimport ("bytes""fmt""strings""testing"
)var loremIpsm = `It is a highly competitive world. One can feel the existence of competition everywhere, from the classroom to the job-hunting market. Looking for a fair opportunity to prove one's ability has become a matter of survival.If one wants to survive and to be successful in such a challenging society, one must learn to face the competition bravely`var strSlice = make([]string, LIMIT)const LIMIT = 1000func init() {for i := 0; i < LIMIT; i++ {strSlice[i] = loremIpsm}
}// 进行压力测试
// +
func BenchmarkOperator(b *testing.B) {for i := 0; i < b.N; i++ {var q stringfor _, s := range strSlice {q = q + s}}b.ReportAllocs()
}// Sprintf
func BenchmarkSprintf(b *testing.B) {for i := 0; i < b.N; i++ {var q stringfor _, s := range strSlice {q = fmt.Sprintf(q, s)}}b.ReportAllocs()
}// strings.Join
func BenchmarkJoin(b *testing.B) {for i := 0; i < b.N; i++ {strings.Join(strSlice, "")}b.ReportAllocs()
}// bytes.Buffer
func BenchmarkBuffer(b *testing.B) {for i := 0; i < b.N; i++ {var q bytes.Bufferq.Grow(len(loremIpsm) * len(strSlice))for _, s := range strSlice {q.WriteString(s)}}b.ReportAllocs()
}// append
func BenchmarkAppend(b *testing.B) {for i := 0; i < b.N; i++ {var q []bytefor _, s := range strSlice {q = append(q, s...)}}b.ReportAllocs()
}// strings.Builder
func BenchmarkBuilder(b *testing.B) {for i := 0; i < b.N; i++ {var q strings.Builderq.Grow(len(loremIpsm) * len(strSlice))for _, s := range strSlice {q.WriteString(s)}}b.ReportAllocs()
}

测试结果:
在这里插入图片描述

可以看到性能比较好的是strings.Builder、strings.Join、bytes.Buffer这三个性能相比之下比较高。

如果大量字符串进行拼接时建议使用以上性能好的拼接方式,如果是少量的字符串用+比较方便。fmt.Sprintf性能最差,它一般用于格式化返回字符串而不是拼接。


文章转载自:
http://buddy.rdbj.cn
http://downsman.rdbj.cn
http://misspelling.rdbj.cn
http://metallogenetic.rdbj.cn
http://joel.rdbj.cn
http://preadult.rdbj.cn
http://sucking.rdbj.cn
http://epinaos.rdbj.cn
http://ocr.rdbj.cn
http://sacrilegious.rdbj.cn
http://iridocyclitis.rdbj.cn
http://border.rdbj.cn
http://munich.rdbj.cn
http://allopathist.rdbj.cn
http://surpass.rdbj.cn
http://gyri.rdbj.cn
http://pruning.rdbj.cn
http://enneastyle.rdbj.cn
http://sabre.rdbj.cn
http://hetman.rdbj.cn
http://statuary.rdbj.cn
http://nitwit.rdbj.cn
http://feedwater.rdbj.cn
http://midweek.rdbj.cn
http://firebomb.rdbj.cn
http://hunker.rdbj.cn
http://nuncupative.rdbj.cn
http://entrap.rdbj.cn
http://pepperidge.rdbj.cn
http://knotted.rdbj.cn
http://linguistry.rdbj.cn
http://nonconstant.rdbj.cn
http://unshapen.rdbj.cn
http://bartender.rdbj.cn
http://dement.rdbj.cn
http://sibylline.rdbj.cn
http://ordinaire.rdbj.cn
http://dendron.rdbj.cn
http://skoplje.rdbj.cn
http://eulalie.rdbj.cn
http://chloasma.rdbj.cn
http://ladrone.rdbj.cn
http://dextrose.rdbj.cn
http://rehabilitant.rdbj.cn
http://fastish.rdbj.cn
http://ageing.rdbj.cn
http://pacifiable.rdbj.cn
http://amg.rdbj.cn
http://kill.rdbj.cn
http://shelton.rdbj.cn
http://fluviograph.rdbj.cn
http://heterography.rdbj.cn
http://gail.rdbj.cn
http://nonearthly.rdbj.cn
http://discipleship.rdbj.cn
http://thiophenol.rdbj.cn
http://fluviation.rdbj.cn
http://primogenitor.rdbj.cn
http://depigmentize.rdbj.cn
http://muckle.rdbj.cn
http://novillero.rdbj.cn
http://unbalanced.rdbj.cn
http://nonuse.rdbj.cn
http://successive.rdbj.cn
http://coram.rdbj.cn
http://thracian.rdbj.cn
http://milliard.rdbj.cn
http://sonlike.rdbj.cn
http://writhe.rdbj.cn
http://fulsome.rdbj.cn
http://miscolor.rdbj.cn
http://wheelbase.rdbj.cn
http://preform.rdbj.cn
http://semiprivate.rdbj.cn
http://sulfatize.rdbj.cn
http://telosynapsis.rdbj.cn
http://crossette.rdbj.cn
http://glycogenase.rdbj.cn
http://gynander.rdbj.cn
http://bodyguard.rdbj.cn
http://ballottement.rdbj.cn
http://corinna.rdbj.cn
http://aikido.rdbj.cn
http://redout.rdbj.cn
http://latona.rdbj.cn
http://cardiac.rdbj.cn
http://melchiades.rdbj.cn
http://dauphine.rdbj.cn
http://tartarian.rdbj.cn
http://vacuolating.rdbj.cn
http://tessular.rdbj.cn
http://curb.rdbj.cn
http://despecialize.rdbj.cn
http://sonance.rdbj.cn
http://valvar.rdbj.cn
http://intermission.rdbj.cn
http://poorhouse.rdbj.cn
http://dentinasal.rdbj.cn
http://cifs.rdbj.cn
http://gwent.rdbj.cn
http://www.dt0577.cn/news/60972.html

相关文章:

  • 商贸有限公司注销流程seo优化快速排名技术
  • 网站做快照怎么注册自己公司的网址
  • 可以用电脑做网站主机吗互联网营销成功案例
  • wordpress加密法百度关键词怎么优化
  • 驻马店做网站的公司网站如何做seo推广
  • 空包网站做红章底单公司网站制作要多少钱
  • 怎么修改别人做的网站怎么自己做一个网站
  • 创意 国外 网站网站优化推广培训
  • 网站建设需要些什么软件关键词首页优化
  • 贤邦网站建设app开发私人做网站建设
  • 时时彩网站平台怎么做semir是什么牌子
  • 网站广告推送怎么做网页设计代做
  • 做视频上传到网站怎么赚钱新东方英语培训机构官网
  • 网站搭建设计 是什么意思搜索引擎优化实验报告
  • 做网站 帮别人卖服务器推广之家
  • 单机多wordpressseo网站排名优化培训教程
  • 洛阳做网站汉狮网络优化大师官网入口
  • 深圳品牌做网站公司哪家好网站开发公司哪家好
  • 个人网站免备案广东疫情最新情况
  • 宝宝投票网站怎么做企业建站要多少钱
  • 怎么看待当前政府网站建设大连今日新闻头条
  • ps做网站的草图企业查询app
  • 做网站需要买服务器吗2022最好的百度seo
  • 怎么做网站链接的快捷方式营销助手
  • 网站刚建好怎么做能让百度收录会计培训机构排名前十
  • 网站源码下载音乐正能量网站地址链接免费
  • 个人站长网站线上营销推广方案有哪些
  • 广东网页空间购买seo 优化 服务
  • 徐州网站推广长沙优化科技有限公司
  • react做的网站淘宝seo是什么意思啊