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

做蛋白go分析网站青海旅游的网站建设

做蛋白go分析网站,青海旅游的网站建设,企业管理咨询是一种,嘉华伊美网站建设在一个真实的 Golang 场景中使用泛型#xff0c;同时寻找与 Stream filter(Predicate? super T predicate)和 Python list comprehension 等同的函数。我没有依赖现有的包#xff0c;而是选择自己写一个过滤函数#xff0c;以达到学习的目的 func filterStrings(c…在一个真实的 Golang 场景中使用泛型同时寻找与 Stream filter(Predicate? super T predicate)和 Python list comprehension 等同的函数。我没有依赖现有的包而是选择自己写一个过滤函数以达到学习的目的 func filterStrings(collection []string, test func(string) bool) (f []string) {for _, s : range collection {if test(s) {f append(f, s)}}return }然而这只适用于字符串。如果我需要过滤一个整数的集合那么我就需要另一个极其相似的函数。这对于一个范型函数来说似乎是一个完美的选择。 func filter[T any](collection []T, test func(T) bool) (f []T) {for _, e : range collection {if test(e) {f append(f, e)}}return }让我们来分析类型化和范型版本之间的少数差异 函数名后面是一个范型T的定义。 T被定义为任何类型。 输入 slice 中元素的类型从字符串变成了T 输入、输出的 clice 类型也从字符串变成了T 不多说了让我们来写一些单元测试。首先我需要一个随机集合在我的例子中是字符串的生成器。 func generateStringCollection(size, strLen int) []string {var collection []stringfor i : 0; i size; i {collection append(collection, strings.Repeat(fmt.Sprintf(%c, rune(A(i%10))), strLen))}return collection }现在我可以写一个测试用例判断 filterStrings 函数的输出与我的过滤范型器的输出相同。 func TestFilter(t *testing.T) {c : generateStringCollection(1000, 3)t.Run(the output of the typed and generic functions is the same, func(t *testing.T) {predicate : func(s string) bool { return s AAA }filteredStrings : filterStrings(c, predicate)filteredElements : filter(c, predicate)if !reflect.DeepEqual(filteredStrings, filteredElements) {t.Errorf(the output of the two functions is not the same)}}) }RUN TestFilterRUN TestFilter/the_output_of_the_typed_and_generic_functions_is_the_same --- PASS: TestFilter (0.00s)--- PASS: TestFilter/the_output_of_the_typed_and_generic_functions_is_the_same (0.00s) PASS考虑新函数在处理大的 slice 时的性能问题。我怎样才能确保它在这种情况下也能表现良好 答案是基准测试。用Go编写基准测试与单元测试很相似。 const (CollectionSize 1000ElementSize 3 )func BenchmarkFilter_Typed_Copying(b *testing.B) {c : generateStringCollection(CollectionSize, ElementSize)b.Run(Equals to AAA, func(b *testing.B) {for i : 0; i b.N; i {filterStrings(c, func(s string) bool { return s AAA })}}) }func BenchmarkFilter_Generics_Copying(b *testing.B) {c : generateStringCollection(CollectionSize, ElementSize)b.Run(Equals to AAA, func(b *testing.B) {for i : 0; i b.N; i {filter(c, func(s string) bool { return s AAA })}}) }go test -bench. -count10 -benchmem goos: darwin goarch: arm64 pkg: github.com/timliudream/go-test/generic_test BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 718408 1641 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 718148 1640 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 732939 1655 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 723036 1639 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 699075 1639 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 707232 1643 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 616422 1652 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 730702 1649 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 691488 1700 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 717043 1646 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 428851 2754 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 428437 2762 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 430444 2800 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 429314 2757 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 430938 2754 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 429795 2754 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 426714 2755 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 418152 2755 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 431739 2761 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 412221 2755 ns/op 4080 B/op 8 allocs/op PASS ok github.com/timliudream/go-test/generic_test 25.005s 我对这个结果并不满意。看起来我用可读性换取了性能。 此外我对分配的数量也有点担心。你注意到我的测试名称中的_Copying后缀了吗那是因为我的两个过滤函数都是将过滤后的项目从输入集合复制到输出集合中。为什么我必须为这样一个简单的任务占用内存 到最后我需要做的是过滤原始的收集。我决定先解决这个问题。 func filterInPlace[T any](collection []T, test func(T) bool) []T {var position, size 0, len(collection)for i : 0; i size; i {if test(collection[i]) {collection[position] collection[i]position}}return collection[:position] }我不是把过滤后的结果写到一个新的集合中然后再返回而是把结果写回原来的集合中并保留一个额外的索引以便在过滤后的项目数上 切 出一个片断。 我的单元测试仍然通过在改变了下面这行之后。 filteredStrings : filterStrings(c, predicate) //filteredElements : filter(c, predicate)filteredElements : filterInPlace(c, predicate) // new memory-savvy function再添加一个 bench 方法 func BenchmarkFilter_Generics_InPlace(b *testing.B) {c : generateStringCollection(CollectionSize, 3)b.Run(Equals to AAA, func(b *testing.B) {for i : 0; i b.N; i {filterInPlace(c, func(s string) bool { return s AAA })}}) }结果是出色的。 go test -bench. -benchmem goos: darwin goarch: arm64 pkg: github.com/timliudream/go-test/generic_test BenchmarkFilter_Typed_Copying/Equals_to_AAA-8 713928 1642 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Copying/Equals_to_AAA-8 426055 2787 ns/op 4080 B/op 8 allocs/op BenchmarkFilter_Generics_Inplace/Equals_to_AAA-8 483994 2467 ns/op 0 B/op 0 allocs/op PASS ok github.com/timliudream/go-test/generic_test 4.925s不仅内存分配归零而且性能也明显提高。
http://www.dnsts.com.cn/news/24039.html

相关文章:

  • 山西建设行政主管部门官方网站网站用户体验度
  • 在线推广是网站推广wordpress好看的页面跳转
  • 网站建设哪家做的好小程序介绍内容怎么写
  • 网站主办者是什么意思长沙企业100强名单
  • 这几年做那些网站致富网站建设实验分析总结
  • 工商营业执照注册网站建一个大型网站需要多少钱
  • 河南网站seo设计做网站商城前景怎么样
  • seo北京网站推广网址大全4399
  • 永康市网站建设制作企业信息查询官网入口
  • 网站建设 会员可以看的内容更多wordpress直接连接数据库
  • 网站查询域名访问前端网站论文
  • 天台城乡规划建设局网站制作一个网页要多少钱
  • 素材下载网站开发文档如何攻克网站
  • 网站建设简单合同单页网站如何做排名
  • 做资料分享网站网络维护协议
  • 信息公司网站建设方案 游戏杭州视频网站建设
  • 网站建立的步骤是( )。模具配件东莞网站建设技术支持
  • 河南省网站制作公司列表网网站建设
  • 滤芯网站怎么做gis网站开发教程
  • ui设计素材网站有哪些个人网站包含哪些内容
  • 网站是如何做的百度收录自适应网站
  • 在线crm网站建站郑州网站制作价格
  • 民治网站优化培训阿里云主机网站开发
  • 济南网站价格wordpress收录
  • 中讯高科网站建设设计游戏的软件
  • 大连市城市建设管理局网站网站制作唐山公司
  • 怎么问客户做不做网站手机网站竞价
  • 手机建站专家阳江招聘网最新招聘
  • 广东省建设教育协会官方网站wordpress中文版主题
  • 攻击自己做的网站吗网站建设的盈利性和非盈利性