泛型性能测试

buguang01 · · 1074 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go type Prop[T any] struct { val T } type PropI[T Ivalue] struct { val T } func (this *PropI[T]) GetDataS() string { return this.val.GetData() } type PropV struct { val any } type PropIV struct { val Ivalue } type PropValue struct { val *value } type value struct { data string } func (this *value) GetData() string { return this.data } type Ivalue interface { GetData() string } func BenchmarkPropValue(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropValue) a.val = &value{"data"} a.val.GetData() } } func BenchmarkPropIvalue(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropIV) a.val = &value{"data"} var b = a.val _ = b b.GetData() // fmt.Println(b) } } func BenchmarkPropVByInterface(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropV) a.val = &value{"data"} var b = a.val.(Ivalue) _ = b b.GetData() // fmt.Println(b) } } func BenchmarkPropTByInterface(b *testing.B) { for i := 0; i < b.N; i++ { a := new(Prop[Ivalue]) a.val = &value{"data"} var b Ivalue = a.val _ = b b.GetData() // fmt.Println(b) } } func BenchmarkPropTByIValue(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropI[*value]) a.val = &value{"data"} a.val.GetData() } } func BenchmarkPropTByIValueFunc(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropI[*value]) a.val = &value{"data"} a.GetDataS() } } func BenchmarkPropTByValue(b *testing.B) { for i := 0; i < b.N; i++ { a := new(Prop[*value]) a.val = &value{"data"} var b *value = a.val _ = b b.GetData() } } func BenchmarkPropTByint32(b *testing.B) { for i := 0; i < b.N; i++ { a := new(Prop[int32]) a.val = 11 var b int32 = a.val _ = b } } func BenchmarkPropVByint32(b *testing.B) { for i := 0; i < b.N; i++ { a := new(PropV) a.val = int32(11) var b int32 = a.val.(int32) _ = b } } ``` 测试结果: ``` BenchmarkPropValue-12 51983382 22.12 ns/op 16 B/op 1 allocs/op BenchmarkPropIvalue-12 52064125 22.96 ns/op 16 B/op 1 allocs/op BenchmarkPropVByInterface-12 35158447 34.03 ns/op 16 B/op 1 allocs/op BenchmarkPropTByInterface-12 41340108 24.72 ns/op 16 B/op 1 allocs/op BenchmarkPropTByIValue-12 53881003 22.29 ns/op 16 B/op 1 allocs/op BenchmarkPropTByIValueFunc-12 53747065 23.84 ns/op 16 B/op 1 allocs/op BenchmarkPropTByValue-12 54542726 22.27 ns/op 16 B/op 1 allocs/op BenchmarkPropTByint32-12 1000000000 0.2349 ns/op 0 B/op 0 allocs/op BenchmarkPropVByint32-12 1000000000 0.2334 ns/op 0 B/op 0 allocs/op ``` 结论: golang的泛型的性能与写实际类型的性能是一样的。这样比我们有时候把成员写成interface性能要高。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1074 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2023-06-06 08:55:44
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传