You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Go语言字符串单索引取值返回ASCII码而非对应字符?

Go字符串索引与切片行为差异原因

首先明确Go语言中字符串的两个核心特性:

  • Go的string类型底层存储的是UTF-8编码的字节序列,下标索引访问(s[i])返回的是byte类型(等价于uint8),而非字符类型。
  • 对string执行切片操作(s[start:end]),返回值仍然是string类型,而非字节切片。

为什么vendor1[0]输出67

你代码里的vendor1[0]取到的是字符串第一个位置的字节值,大写字母C的ASCII编码值恰好是十进制的67。fmt.Println打印byte类型值时默认输出其十进制数值,所以你看到的是67而非字符C。
如果要输出对应字符,可以显式做类型转换:

fmt.Println(string(vendor1[0])) // 输出 C

为什么切片操作返回预期字符串

当你使用vendor1[1:4]这类切片语法操作字符串时,Go会把选中的字节序列重新封装为string类型返回,fmt.Println打印string类型时会直接输出UTF-8解码后的文本内容,所以得到的就是你预期的字符片段。

额外注意

如果字符串中包含中文、emoji这类占多个字节的UTF-8字符,直接用下标访问只会拿到单个字节的编码值,无法得到完整字符,需要遍历字符串时建议使用for range语法,可以自动按rune类型(等价于int32,存储完整的Unicode码点)读取每个字符。


内容的提问来源于stack exchange,提问作者Parry Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:45:01