GO语言基础教程(23)Go基础类型之字符串类型及其操作:Go语言字符串全解析:你的第一份字符串处理指南

字符串用得好,编程没烦恼

1. Go语言字符串面面观

1.1 字符串是什么?

Go语言中的字符串,说白了就是一串固定长度的字符连接起来的字符集合。但它和我们熟悉的C语言字符串有很大不同——Go字符串有自己独立的string类型,不再是以'\0'结尾的字符数组。

// 简单的字符串定义
var str string
str1 := "hello world"
var str2 = "hello world too"

值得一提的是,Go语言源代码默认采用UTF-8编码,这使得Go语言对非ASCII字符有着原生支持。UTF-8是一种变长编码,英文字符占1个字节,中文字符通常占3个字节。

1.2 字符串的底层秘密

了解字符串的底层结构,能帮你更好地理解它的行为。在Go运行时中,字符串实际上是这样一个结构体:

type stringStruct struct {
    str unsafe.Pointer  // 指向字节数组的指针
    len int             // 字符串的字节长度
}

当你使用unsafe.Sizeof("")时会发现,无论字符串内容是什么,这个结果都是16(64位平台上),其中8字节是指针,8字节是长度。

字符串的一个关键特性是不可变性。一旦创建,你就无法修改字符串的内容:

s := "hello"
// s[0] = 'H'  // 这行会报错:cannot assign to s[0]

这种不可变性带来的好处是线程安全哈希计算优化,同时也使得字符串切片操作非常高效,因为切片可以共享底层存储而不需要复制数据。

2. 字符串的创建与基本操作

2.1 创建字符串的多种方式

Go语言提供了两种字符串字面值形式:

// 解释字符串(使用双引号)
s1 := "心有猛虎,细嗅蔷薇\n第二行"
// 输出:心有猛虎,细嗅蔷薇
//       第二行

// 原生字符串(使用反引号)
s2 := `心有猛虎,细嗅蔷薇\n第二行`
// 输出:心有猛虎,细嗅蔷薇\n第二行

双引号字符串支持转义字符,如\n(换行)、\t(制表符)等,而反引号字符串内部会原样解析内容,包括换行和特殊字符。

2.2 字符串基本操作一览

字符串的基本操作相当直观:

// 长度查询
s := "hello"
fmt.Println(len(s)) // 输出:5

// 字符串连接
s1 := "hello"
s2 := "world"
result := s1 + " " + s2
fmt.Println(result) // 输出:hello world

// 字符串比较
fmt.Println("abc" == "abc") // true
fmt.Println("abc" !
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值