go_字符串

本文介绍了Go语言中字符串的特点,包括其Unicode兼容性和UTF-8编码。重点讲解了如何访问单个字符和处理多字节字符(如ñ),以及使用`rune`类型解决编码问题。还提到Go中的字符串是不可变的,以及如何正确计算包含多字节字符的字符串长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串是Go中的字节切片

Go 中的字符串是兼容Unicode编码的,并且是UTF-8编码的。

访问字符的单个字节

在这里插入图片描述
%x是十六进制
%c是字符

访问字符串的单个字符

在 UTF-8 编码中,一个码点可能会占一个以上的字节。 在这种情况下,我们需要 rune 来帮助解决问题。

package main

import (
	"fmt"
)

func printBytes(s string) {
	fmt.Printf("Bytes: ")
	for i := 0; i < len(s); i++ {
		fmt.Printf("%x ", s[i])
	}
}

func printChars(s string) {
	fmt.Printf("Characters: ")
	for i := 0; i < len(s); i++ {
		fmt.Printf("%c ", s[i])
	}
}

func main() {
	web := "https:www.gotribe.cn"
	fmt.Printf("String: %s\n", web)
	printBytes(web)
	fmt.Printf("\n")
	printChars(web)

	fmt.Printf("\n\n")
	web = "Señor"
	fmt.Printf("String: %s\n", web)
	printBytes(web)
	fmt.Printf("\n")
	printChars(web)
}
String: https:www.gotribe.cn
Bytes: 68 74 74 70 73 3a 77 77 77 2e 67 6f 74 72 69 62 65 2e 63 6e 
Characters: h t t p s : w w w . g o t r i b e . c n 

String: Señor
Bytes: 53 65 c3 b1 6f 72 
Characters: S e à ± o r//注意看这里

上面程序的第 33 行,我们尝试将 “Señor” 中的每个字符打印出来,但是却得到了 “Señor”。为什么这个程序在 “https:www.gotribe.cn” 上运行正常,但是不适用于 “Señor” 呢?因为 ñ 的 Unicode 码点是 U+00F1,因而它的 UTF-8 编码占了两个字节:c3 和 b1。上面的程序假定每个码点只有一个字节长度,因此会发生错误。在 UTF-8 编码中,一个码点可能会占一个以上的字节。 在这种情况下,我们需要 rune 来帮助解决问题。

rune

ne
rune 是 Go 中的内置类型,它是 int32 的别名。Rune 表示 Go 中的 Unicode 代码点。代码点占用多少字节并不重要,它可以用一个符文来表示。让我们修改上面的程序以使用符文打印字符。

func printChars(s string) {  
    fmt.Printf("Characters: ")
    runes := []rune(s)//字符串被转换为rune切片
    for i := 0; i < len(runes); i++ {
        fmt.Printf("%c ", runes[i])
    }
}

字符串连接

直接 +

这种也可以
result := fmt.Sprintf(“%s %s”, string1, string2)

注意点:

  • 字符串在 Go 中是不可变的。一旦创建了字符串,就无法更改它。
  • utf8包提供了RuneCountInString(s string) (n int)来获取字符串的长度。一些 Unicode 字符的代码点占据了超过 1 个字节。len用于找出这些字符串的长度将返回不正确的字符串长度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值