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

公司网站哪里好外贸电商是做什么的

公司网站哪里好,外贸电商是做什么的,软件技术专升本需要考什么,wordpress 好的主题文章目录 使用 strconv.Itoa使用 fmt.Sprintf使用 strconv.FormatIntFormatInt 深入剖析1. 快速路径处理小整数2. formatBits 函数的高效实现 结论 Go 语言 中#xff0c;将整数#xff08;int#xff09;转换为字符串#xff08;string#xff09;是一项常见的操作。 本文… 文章目录 使用 strconv.Itoa使用 fmt.Sprintf使用 strconv.FormatIntFormatInt 深入剖析1. 快速路径处理小整数2. formatBits 函数的高效实现 结论 Go 语言 中将整数int转换为字符串string是一项常见的操作。 本文将从逐步介绍几种在 Go 中将 int 转换为 string 的常见方法并重点剖析这几种方法在性能上的特点。另外还会重点介绍 FormatInt 高效的算法实现。 使用 strconv.Itoa 最直接且常用的方法是使用 strconv 包中的 Itoa 函数。Itoa 是 “Integer to ASCII” 的简写它提供了一种快速且简洁的方式实现整数到字符串之间的转换。 示例代码如下 package mainimport (strconvfmt )func main() {i : 123s : strconv.Itoa(i)fmt.Println(s) }strconv.Itoa 是通过直接将整数转换为其 ASCII 字符串表示形式。这个过程中尽量减少了额外的内存分配没有复杂逻辑。 使用 fmt.Sprintf 另一种方法是使用 fmt 包的 Sprintf 函数。这个方法在功能上更为强大和灵活因为它能处理各种类型并按照指定的格式输出。 示例代码如下 package mainimport (fmt )func main() {i : 123s : fmt.Sprintf(%d, i)fmt.Println(s) }虽然 fmt.Sprintf 在功能上非常强大但它的性能通常不如 strconv.Itoa。 为什么呢 因为 fmt.Sprintf 内部使用了反射reflection确定输入值类型并且在处理过程中涉及到更多的字符串拼接和内存分配。 使用 strconv.FormatInt 当需要更多控制或处理非 int 类型的整数如 int64时可以使用 strconv 包的 FormatInt 函数。 package mainimport (strconvfmt )func main() {var i int64 123s : strconv.FormatInt(i, 10) // 10 表示十进制fmt.Println(s) }strconv.FormatInt 提供了对整数转换过程的更细粒度控制包括 base 的选择例如十进制、十六进制等。 与 strconv.Itoa 类似FormatInt 在性能上也非常可观而且 FormatInt 提供了既灵活又高效的解决方案。 如果我们查看 strconv.Itoa 源码会发现 strconv.Itoa 其实是 strconv.FormatInt 的一个特殊情况。 // Itoa is shorthand for FormatInt(int64(i), 10). func Itoa(i int) string {return FormatInt(int64(i), 10) }现在 int 转 string 的高性能源码剖析就变成了重点剖析 FormatInt。 FormatInt 深入剖析 基于 Go 1.21 版本的 itoa.go 源码我们可以深入理解 strconv 包中整数到字符串转换函数的高效实现。 func FormatInt(i int64, base int) string {if fastSmalls 0 i i nSmalls base 10 {return small(int(i)) // 100 以内的十进制小整数使用 small 函数转化}_, s : formatBits(nil, uint64(i), base, i 0, false) // 其他情况使用 formatBitsreturn s }以下是对其核心部分的详细解读将会突出了其性能优化的关键方面结合具体的源码实现说明。 1. 快速路径处理小整数 对于常见的小整数strconv 包提供了一个快速路径small 函数直接返回预先计算好的字符串避免了运行时的计算开销。 func small(i int) string {if i 10 {return digits[i : i1]}return smallsString[i*2 : i*22] }对于小于 100 的十进制整数采用这个快速实现方案或许这也是整数转字符串的最常见使用场景吧。 small 函数通过索引到 smallsString 和 digits 获取小整数的字符串表示这个过程非常快速。 digits 和 smallsString 的值如下所示 const smallsString 00010203040506070809 10111213141516171819 20212223242526272829 30313233343536373839 40414243444546474849 50515253545556575859 60616263646566676869 70717273747576777879 80818283848586878889 90919293949596979899const digits 0123456789abcdefghijklmnopqrstuvwxyz它们也就是十进制 0-99 与对应字符串的映射。 2. formatBits 函数的高效实现 FormatInt 最复杂的部分是 formatBits 函数它是整数到字符串转换的核心它针对不同的基数进行了优化。 10进制转换的优化 对于10进制转换formatBits 使用了基于除法和取余的算法并通过 smallsString 加速两位数的字符串获取。 if base 10 {// ... (32位系统的优化)us : uint(u)for us 100 {is : us % 100 * 2us / 100i - 2a[i1] smallsString[is1]a[i0] smallsString[is0]}// ... (处理剩余的数字) }对于 32 位系统使用32位操作处理较大的数字减少 64 位除法的开销。每次处理两位数字直接从 smallsString 获取对应的字符避免了单独转换每一位的开销。 2的幂基数的优化 对于基数是2的幂的情况formatBits 使用了位操作来优化转换。 } else if isPowerOfTwo(base) {shift : uint(bits.TrailingZeros(uint(base))) 7b : uint64(base)m : uint(base) - 1 // 1shift - 1for u b {i--a[i] digits[uint(u)m]u shift}// u basei--a[i] digits[uint(u)] }位操作是直接在二进制上进行比除法和取余操作更快。利用 2 的幂基数的特性通过移位和掩码操作获取数字的各个位。 通用情况的处理 对于其他基数formatBits 使用了通用的算法但仍然尽量减少了除法和取余操作的使用。 } else {// general caseb : uint64(base)for u b {i--// Avoid using r a%b in addition to q a/b// since 64bit division and modulo operations// are calculated by runtime functions on 32bit machines.q : u / ba[i] digits[uint(u-q*b)]u q }我觉得最核心的算法就是利用移位和特殊路径预置映射关系。另外由于算法足够优秀还避免了一些不必要内存分配。 结论 将 int 转化为 string 是一个非常常见的需求。Go 语言的 strconv 包中的 int 到 string 的转换函数展示了 Go 标准库对性能的深刻理解和关注。 通过快速处理小整数、优化的 10 进制转换算法、以及2^n 基数的特别处理这些函数能够提供高效且稳定的性能。这些优化确保了即使在大量数据或在性能敏感的场景中strconv 包的函数也能提供出色的性能 博文地址GO 中高效 int 转换 string 的方法与源码剖析
http://www.hkea.cn/news/14461537/

相关文章:

  • 35互联网站建设怎么样wordpress 分类目录导航
  • 建造电商网站导购网站的seo怎么做
  • htm网站制作长沙建网站设计公司
  • 建设部网站 测绘规章酒店网站的建设
  • 广州做一个网站多少钱创新创意产品设计方案
  • 网络上市场推广seo用什么论坛引流
  • 平台网站的建设需求wordpress插件选项
  • 永川网站开发大连网络科技有限公司
  • 雅加达网站建设网站设计与建设书
  • 英孚做网络作业的网站秦皇岛网站公司
  • 网站建设如何建织梦后台生成网站地图
  • 北京超市网站建设临淄百度信息港网
  • asp 网站源码wordpress建站价格
  • 衡水网站联系电话公司网站建设管理办法
  • 温州网站维护工作长沙网页制作模板的网站
  • 阿克苏网站建设咨询深圳东门老街有什么好玩的
  • 有做外国人的零售网站吗基于php的图书管理系统论文
  • 社区网站 备案做企业网站为什么要服务器呢
  • 四川阿坝建设招标网站创新驱动发展战略方针
  • 旅行社网站 模板怎么看网站做没做推广
  • 广东建立网站织梦网站地图调用全站文章
  • 贵阳建站公司手机英文网站大全
  • 成都网站建设_创新互联手表二级市场网站
  • 如何对网站做优化昆明中国建设银行网站
  • 龙游建设工程信息网站wordpress加密版权
  • 重庆网络推广网站php网站建设课程作业
  • 广东移动手机营业厅网站网站建设需要金额
  • 高职院校优质校建设专栏网站互联网保险排名
  • 郑州做网站公司yookerseo教程免费分享
  • 阿坝州建设局网站刘志彬给网站划分栏目