go cmd/stringer 通过代码生成提高效率

ℹ️ 本文基于Go 1.17

stringer命令旨在自动创建满足fmt.Stringer的方法。它为指定类型生成String()并将其描述为字符串。常可用于定义错误码时同时生成错误信息等场景。

案例:

这是我们常用的生成常量值的方法

如果量很多,那么手写是挺麻烦的事情

让我们使用stringer -type=Hash命令生成String()方法:

//stringer并不是 Go 自带的工具,需要手动安装。可以执行下面的命令安装:go get golang.org/x/tools/cmd/stringer

利用 stringer 生成String方法 如下

 此时会生成一个带_string后缀的文件

 效率

stringer生成一个字符串,该字符串包含作为字符串的值的列表,以及一个包含每个字符串的索引的数组。在我们的示例中,读取MD5将包括从索引3到6读取字符串:

 但是它有多快和高效?让我们与其他两种解决方案进行比较:

  • 使用硬编码值生成String()函数:

基准测试:

 

  • String()函数生成一个map:

 基准测试:

 

 

自检

 stringer将每行的常量名称与该值一起写入。在此示例中,MD5的值为2。更新常量名称或其值将生成错误:

只有String()函数以二进制形式导出。该检查没有性能或二进制大小的开销。

参考博客:

Go: Stringer Command, Efficiency Through Code Generation | by Vincent Blanchon | A Journey With Go | Medium

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值