分享两个在开发中需注意的小点

简介: 分享两个在开发中需注意的小点

文章目录:

  • 不要使用 + 和 fmt.Sprintf 操作字符串
  • +
  • fmt.Sprintf
  • bytes.NewBufferString
  • 对于固定字段的键值对,不要使用 map[string]interface{}
  • map[string]interface{}
  • 临时 Struct
  • 小结
  • 推荐阅读


不要使用 + 和 fmt.Sprintf 操作字符串

不要使用 +fmt.Sprintf 操作字符串,虽然很方便,但是真的很慢!

我们要使用 bytes.NewBufferString 进行处理。

基准测试如下:

+

func BenchmarkStringOperation1(b *testing.B)  {
 b.ResetTimer()
 str := ""
 for i := 0; i < b.N; i++ {
  str += "golang"
 }
}
// 输出
goos: darwin
goarch: amd64
pkg: demo/stringoperation
cpu: Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
BenchmarkStringOperation1
BenchmarkStringOperation1-12       353318     114135 ns/op
PASS
Process finished with the exit code 0

fmt.Sprintf

func BenchmarkStringOperation2(b *testing.B)  {
 b.ResetTimer()
 str := ""
 for i := 0; i < b.N; i++ {
  str = fmt.Sprintf("%s%s", str, "golang")
 }
}
// 输出
goos: darwin
goarch: amd64
pkg: demo/stringoperation
cpu: Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
BenchmarkStringOperation2
BenchmarkStringOperation2-12       280140     214098 ns/op
PASS
Process finished with the exit code 0

bytes.NewBufferString

func BenchmarkStringOperation3(b *testing.B)  {
 b.ResetTimer()
 strBuf := bytes.NewBufferString("")
 for i := 0; i < b.N; i++ {
  strBuf.WriteString("golang")
 }
}
// 输出
goos: darwin
goarch: amd64
pkg: demo/stringoperation
cpu: Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
BenchmarkStringOperation3
BenchmarkStringOperation3-12     161292136          8.582 ns/op
PASS
Process finished with the exit code 0

对于固定字段的键值对,不要使用 map[string]interface{}

对于固定字段的键值对,不要使用 map[string]interface{}!

我们要使用临时 Struct

基准测试如下:

map[string]interface{}

func BenchmarkStructOperation1(b *testing.B) {
 b.ResetTimer()
 for i := 0; i < b.N; i++ {
  var demo = map[string]interface{}{}
  demo["Name"] = "Tom"
  demo["Age"] = 30
 }
}
// 输出
goos: darwin
goarch: amd64
pkg: demo/structoperation
cpu: Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
BenchmarkStructOperation1
BenchmarkStructOperation1-12     43300134         27.97 ns/op
PASS
Process finished with the exit code 0

临时 Struct

func BenchmarkStructOperation2(b *testing.B) {
 b.ResetTimer()
 for i := 0; i < b.N; i++ {
  var demo struct {
   Name string
   Age  int
  }
  demo.Name = "Tom"
  demo.Age = 30
 }
}
// 输出
oos: darwin
goarch: amd64
pkg: demo/structoperation
cpu: Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
BenchmarkStructOperation2
BenchmarkStructOperation2-12     1000000000          0.2388 ns/op
PASS
Process finished with the exit code 0

小结

你有类似这样的注意点吗,欢迎留言~

目录
相关文章
|
JSON 小程序 Android开发
小程序列表左滑效果在IOS呈上下滑动影响样式
小程序列表左滑效果在IOS呈上下滑动影响样式
131 0
|
7月前
|
图形学
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
【unity小技巧】Unity中实现一个战斗连击连招系统,可以动态添加减少连击连招段数功能
153 0
|
8月前
|
定位技术 iOS开发
自动布局xib页面的机型匹配精典问题及解决方案
自动布局xib页面的机型匹配精典问题及解决方案
53 0
|
8月前
|
测试技术 iOS开发
蓝条下压和消失导致页面错乱问题解决方案
蓝条下压和消失导致页面错乱问题解决方案
56 0
|
前端开发
前端学习笔记202304学习笔记第六天-样式冲突-组件样式冲突
前端学习笔记202304学习笔记第六天-样式冲突-组件样式冲突
61 0
|
前端开发
前端学习笔记202304学习笔记第六天-样式冲突-组件样式冲突2
前端学习笔记202304学习笔记第六天-样式冲突-组件样式冲突2
70 0
|
消息中间件 JavaScript 小程序
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
费解的开关笔记
费解的开关笔记
74 0
|
人工智能 JavaScript 前端开发
小程序实现页面多级来回切换支持滑动和点击操作
想留住粉丝,就必须安排演示: [审核中…]然后开摆!!!!首先通过swiper创建一个简单的多tab页面 通过触发pagechange1方法中的事件对currentIndex来进行赋值,又通过currentIndex的改变使前端wxml对应更改,这个部分对滑动和点击的操作都一样,无非就是使currentIndex对应到各自的位置,通过数字来决定位置 这个部分完整代码如下: wxml wxss js 上一步完成后,下级页面再加一个滑动页面,当内切换结束后,在做切换就是父级的切换操作 在“内容1”的vie
275 0
小程序实现页面多级来回切换支持滑动和点击操作
|
前端开发 JavaScript Serverless
移动端弹出阴影遮罩的几点问题和解决方法
在做移动端的立即购买页面时,点击底部固定栏立即购买按钮需要弹出一个阴影遮罩,在遮罩顶部有一个固定在底部的页面,所以总共是3层页面:最底层浏览页->阴影遮罩页->最上层的立即购买选择规格数量页;效果如下图:
234 0
移动端弹出阴影遮罩的几点问题和解决方法