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

语言教学网站建设课程总结咋把网站制作成软件

语言教学网站建设课程总结,咋把网站制作成软件,上海建站,网站建设西安哪里好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://www.yayakq.cn/news/686487/

相关文章:

  • 网站开发注册个体工商wordpress ftp 密码忘记
  • 建网站都用什么字体吉林省四平市网站建设
  • 茂名市制作网站的公司临沧高端网站建设
  • 江西做网站的自己做电商网站吗
  • 简单好看个人主页网站模板万网网站后台留言在哪
  • 网页制作新建站点步骤网站建设实训作业
  • 贵州软件开发 网站开发深圳商城网站设计多少钱
  • 360网站排名怎么做金泉网是做网站的吗
  • 网站换一个图片怎么做seo优化快速排名技术
  • wordpress不能启动怎么解决方法山东seo费用多少
  • 电子商务平台网站建设方式网站服务器速度慢
  • 网站建设策划书是由谁编写的局网站内容建设考核
  • 网站维护案云南网是什么网站
  • 做教育业网站安康微平台
  • 如何用付费音乐做视频网站厦门建设厅查询网站首页
  • 大学作业旅游网站设计报告彩页印刷
  • 网站开发免费wordpress博客代码高亮
  • 网站建设推广方式网站框架是什么
  • 网站关键词搜索优化怎么做开化网络营销怎么做
  • 建视频网站模板网站开发常问的技术性问题
  • 网站版式mysql 大型网站开发
  • 如何看一个网站的备案在哪里做的可以看电视剧的网站
  • 网站运营托管协议网站的大量图片存储格式
  • 工信部 网站备案查询郑州正规网站设计价格
  • 网站建设销售人才简历爆wordpress密码
  • 极路由做网站提升网站收录
  • 网站改版需要多少钱环保网站模版
  • 做网站服务公司seo小白入门
  • 如何将别人的网站作为自己的永久免费自动建站系统
  • 网站推广软件下拉管家网站是用织梦系统做的首页打开超慢