go语言中的字符

ASCII码值

image

在go中,定义字符使用单引号

字符在实际的项目中使用的并不多哈.
'' 单引号 → 只能括1个字符(rune),如果定义多个字符会报错的哈;

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符a
	var a ='a'
	// 自定义一个字符a122
	// var a1 ='a122' //会报错的哈
	// 输出a的 ASCII码值
	fmt.Printf("%v\n", a)
	// 输出a的类型 int32
	fmt.Printf("%T", a)
}

在go中,定义字符串使用双引号,不能使用单引号,否则会报错

Go语言的字符有以下两种:

uint8类型,或者叫 byte 型,代表了ASClI码的一个字符。
rune类型,代表一个UTF-8字符。
当需要处理中文、日文或者其他复合字符时则需要用到rune类型。
rune类型也可以去处理 byte类型的数据, rune 类型比较强大。
rune类型实际是一个int32。

定义一个字符串输出里面的字符

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符串
	var str = "'hello world"
	// // 输出a的 ASCII码值 104
	fmt.Printf("%v\n", str[1])
	// 输出: uint8
	fmt.Printf("%T", str[1])
}

go中,一个汉字占用3个字节,因为汉字使用的是UTF-8编码。

go中,一个字母占用1个字节,因为字符使用的是ASClI码。

go中,自定义字符使用单引号[很重要]

查看字符串所占用的字节数 len(str)

len(s) 返回的是字符串底层字节的长度,即 UTF-8 编码后的字节数,不是字符个数。

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符串
	var str = "hello你好"
	// 输出字符串的字节数是 11
	fmt.Printf("%v\n", len(str))
}

定义一个字符;字符是int类型

go中汉字使用的是UTF-8编码,编码后的值是int类型。

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符,使用单引号
	var a = '国'
	//值:22269, 类型:int32
	fmt.Printf("值:%v, 类型:%T\n", a, a)
}

这种循环会出现问题

如果字符串全部都是字母;可以使用下面的方式进行循环。
如果字符串中包含中文,循环就会出现问题。

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符
	var str = "你好go"
	// 循环输出字符串中的每个字符,推荐使用range循环
	for i :=0;i<len(str);i++{
		v := str[i]
		fmt.Printf("值:%c\n", v)
	}
}

image

循环输出字符串【推荐使用range循环】

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 自定义一个字符
	var str = "你好go"
	//  循环输出字符串中的每个字符,推荐使用range循环
	for _, v := range str {
		// 值:你
		// 值:好
		// 值:g
		// 值:o
		fmt.Printf("值:%c\n", v)
	}
}

image

修改字符串

要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。
无论哪种转换,都会重新分配内存,并复制字节数组。

修改字符串(1)

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 修改字符串
	str := "big"
	// 先将字符串转换为[]byte类型
	byteStr := []byte(str)
	// 修改字符串,这样只能修改为字母;修改为中文会报错
	// byteStr[0] = '中' // 报错
	byteStr[0] = 'p'
	// 再将[]byte类型转换为string类型
	fmt.Println(string(byteStr)) // pig
}

修改字符串(2)

在 Go 中,string 不能直接赋值给 rune,类型不匹配,所以编译无法通过。

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 修改字符串
	str := "big"
	// 先将字符串转换为[]rune类型
	runeStr := []rune(str)
	// 修改字符串
	runeStr[0] = '中' // ok
	// 报错;在 Go 中,string 不能直接赋值给 rune,类型不匹配,所以编译无法通过。
	runeStr[1] =  "A" // 编译错误
	// 再将[]rune类型转换为string类型
	fmt.Println(string(runeStr)) // 中文big
}

修改字符串(3)

'' 单引号 → 必须且只能括 1个 字符(rune)
[]rune 切片中的每个元素只能装 1个 字符,不能把多个字符塞进一个索引里。

package main
import (
	"fmt"
)
// 入口函数
func main()  {
	// 修改字符串
	str := "big"
	// 先将字符串转换为[]rune类型
	runeStr := []rune(str)
	// '' 单引号 → 必须且只能括 1个 字符(rune)。
	// "" 双引号 → 括多个字符(string)。
	// []rune 切片中的每个元素只能装 1个 字符,不能把多个字符塞进一个索引里。因此会报错
	runeStr[0] = '中A'  // 报错的原因
	// 再将[]rune类型转换为string类型
	fmt.Println(string(runeStr)) // 中文big
}

字符和字符串

组成每个字符串的元素叫做“字符",可以通过遍历字符串元素获得字符。
字符用单引号()包裹起来,如:

posted @ 2026-08-17 20:57  何人陪我共长生  阅读(0)  评论(0)    收藏  举报