【原】golang slice组成的几种方式性能对比

背景是群里小伙伴写go项目代码,用orm 插入sql,第一步分三条sql、三个slice 插入,建议他一条sql 插入,他找到了批量插入。

但是批量插入需要组成一个切片slice,然后对于这个slice,一个元素不同,其他元素相同,他在想最优雅的解决办法。别人指导了一下 使用指针new 时,

偶尔间我测了下性能,发现差异很多。直接上代码

1
2
3
4
5
6
7
8
9
10
11
type User struct {
    ID    int
    Name  string
    Title string
}
 
 
func (n *User) New(name string) User {
    n.Name = name
    return *n
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main
 
import (
    "testing"
)
 
//go test -bench=. -benchmem -run=none
func BenchmarkUser_NewBuild(b *testing.B) {
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        user := User{Title: "hee"}
        _ = []User{user.New("2"), user.New("2"), user.New("2")}
        //fmt.Println(users)
    }
}
 
func BenchmarkUser_Build(b *testing.B) {
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        users := make([]User, 3)
        for i := 0; i < 3; i++ {
            users[i].Name = "2"
            users[i].Title = "hee"
        }
        //fmt.Println(users)
    }
}
 
func BenchmarkUser_New(b *testing.B) {
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        _ = []User{{Name: "hee", Title: "2"}, {Name: "hee", Title: "2"}, {Name: "hee", Title: "2"}}
    }
}

  

1
2
3
4
5
6
7
8
9
deMacBook-Pro:orm cgy$ go test -bench=. -benchmem -run=none
goos: darwin
goarch: amd64
pkg: go-test/orm
BenchmarkUser_NewBuild-4        336196467                3.50 ns/op            0 B/op          0 allocs/op
BenchmarkUser_Build-4           610977325                2.00 ns/op            0 B/op          0 allocs/op
BenchmarkUser_New-4             1000000000               0.339 ns/op           0 B/op          0 allocs/op
PASS
ok      go-test/orm     3.350s

  可见,直接给定值比设定len快,更比每次动态修改值快多了

posted on   studyphp  阅读(457)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示