码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-07-05 18:05:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:golang   代码   printf   fun   int   name   ati   struct   str   

不要使用 + 和 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

小结

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

下面推荐阅读的这几篇文章也是关于开发中需要知道的小技术点,更多技术细节和代码讨论,可以加入到我的星球:https://t.zsxq.com/iIUVVnA

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

标签:golang   代码   printf   fun   int   name   ati   struct   str   

原文地址:https://www.cnblogs.com/xinliangcoder/p/14966169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!