如何在 Go 中将 int 转换为 string:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“我绞尽脑汁一小时,解决方案只有三行”:如何在 Go 中将 int 转换为 string

\n\n

想象一下:您正在用 Go 编写一个微服务,处理用户的数字 ID,然后突然意识到需要将它们与日志或 HTTP 响应中的文本拼接起来。您写了类似 str := "User_" + id 的代码——但编译器报错了:cannot use id (type int) as type string in concatenation。熟悉吗?

\n\n

这是 Stack Overflow 上关于 Go 最热门的问题之一——“How to convert an int value to string in Go?”——已被浏览数十万次。这并非偶然:Go 是强类型语言,不能简单地将数字与字符串“相加”。但别担心——今天我们将详细讲解在 Go 中将 int 转换为 string 的所有方法。您将了解哪种方法更快、哪种更安全,以及何时使用哪种方法。开始吧!

\n\n

为什么 Go 不允许简单地将 int 和 string 相加?

\n\n

与 JavaScript 或 Python 不同,在那些语言中 "Age: " + 25 可以“开箱即用”,而 Go 要求显式类型转换。这是为了安全:您必须始终控制转换的内容和方式。想象一下,您不小心将一个数字与文本相加——在其他语言中,这可能导致难以发现的错误。在 Go 中,编译器会立即说:“停,不能这样”。

\n\n

因此,在 Go 中将 int 转换为 string 需要使用标准库中的特殊函数。无需外部依赖——只需纯 Go。

\n\n

方法 #1:fmt.Sprintf——通用的“瑞士军刀”

\n\n

最直观的方法是使用 fmt.Sprintf 函数。您可能已经通过格式化输出熟悉它了。它可以将任何内容转换为字符串——数字、布尔值、结构体。

\n\n
package main\n\nimport "fmt"\n\nfunc main() {\n    age := 25\n    str := fmt.Sprintf("Age: %d", age)\n    fmt.Println(str) // 输出: Age: 25\n}
\n\n

优点:

\n
    \n
  • 非常灵活:可以立即将数字以所需格式(十进制、十六进制、前导零)嵌入到字符串中。
  • \n
  • 适用于任何类型——不仅是 int,还有 float、bool、struct。
  • \n
\n\n

缺点:

\n
    \n
  • 底层使用反射,因此比专用函数运行速度慢。
  • \n
  • 如果您只需要从数字获取字符串(无需格式化),这有些冗余。
  • \n
\n\n

何时使用:当您不仅需要转换,还需要格式化输出时——添加货币符号、按宽度对齐、转换为十六进制。

\n\n

方法 #2:strconv.Itoa——快速简单(int → string)

\n\n

如果您的任务只是获取数字的字符串表示形式,无需任何“装饰”,请使用 strconv.Itoa。这是一个用于将 int 转换为 string 的专用函数。它运行速度快,且不执行多余操作。

\n\n
package main\n\nimport (\n    "fmt"\n    "strconv"\n)\n\nfunc main() {\n    number := 42\n    str := strconv.Itoa(number)\n    fmt.Println(str) // 输出: "42"\n    fmt.Printf("类型: %T\\n", str) // 类型: string\n}
\n\n

优点:

\n
    \n
  • 在基本情况下性能最佳。
  • \n
  • 简单:一个函数完成一个操作。
  • \n
\n\n

缺点:

\n
    \n
  • 仅适用于 int 类型。如果您有 int64、int32 等,需要先转换为 int 或使用其他方法。
  • \n
  • 无法控制进制——仅十进制表示。
  • \n
\n\n

何时使用:当您有普通的 int 并且只需要获取字符串时——这是您的默认选择。

\n\n

方法 #3:strconv.FormatInt——控制进制

\n\n

但是,如果您需要将数字转

博客

书籍推荐