当前位置: 首页 > news >正文

Go语言--语法基础4--基本数据类型--字符串类型

Go 语言中,字符串也是一种基本类型。相比之下, C/C++ 语言中并不存在原
生的字符串类型,
通常使用字符数组来表示,并以字符指针来传递。
Go 语言中字符串的声明和初始化非常简单,举例如下:
var str string // 声明一个字符串变量
str = "Hello world" // 字符串赋值
ch := str[0] // 取字符串的第一个字符
fmt.Printf("The length of \"%s\" is %d \n", str, len(str))
fmt.Printf("The first character of \"%s\" is %c.\n", str, ch)
输出结果为:
The length of "Hello world" is 11
The first character of "Hello world" is H.
字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内
容不能在初始
化后被修改,比如以下的例子:
str := "Hello world" // 字符串也支持声明时进行初始化的做法
str[0] = 'X' // 编译错误
编译器会报类似如下的错误:
cannot assign to str[0]
1 、 字符串操作
平时常用的字符串操作如表所示,更多的字符串操作,请参考标准库 strings 包。
2 、 字符串遍历
Go 语言支持两种方式遍历字符串。一种是以字节 数组的方式遍历:
str := "Hello, 世界 "
n := len(str)
for i := 0; i < n; i++ {
ch := str[i] // 依据下标取字符串中的字符,类型为 byte
fmt.Println(i, ch)
}
这个例子的输出结果为:
0 72
1 101
2 108
3 108
4 111
5 44
6 32
7 228
8 184
9 150
10 231
11 149
12 140
可以看出,这个字符串长度为 13 。尽管从直观上来说,这个字符串应该只有 9
字符。
这是因为每个中文字符在 UTF-8 中占 3 个字节,而不是 1 个字节。
另一种是以 Unicode 字符遍历:
str := "Hello, 世界 "
for i, ch := range str {
fmt.Println(i, ch)//ch 的类型为 rune
}
输出结果为:
0 72
1 101
2 108
3 108
4 111
5 44
6 32
7 19990
10 30028
Unicode 字符方式遍历时,
每个字符的类型是 rune (早期的 Go 语言用 int 类型表示 Unicode 字符),而不是
byte
3 、字符串的分割
strings.Split 支持单个分隔符
strings.FieldsFunc 支持多个分隔符
返回值:均为切片
func main() {
srcStr1 := "abc:def:k:g"
desStr1 := strings.Split(srcStr1, ":")
fmt.Printf("ret:%s\n", desStr1)
srcStr2 := "a b c,def,k,g"
desStr2 := strings.FieldsFunc(srcStr2, splitFunc)
fmt.Printf("ret:%s\n", desStr2)
}
func splitFunc(r rune) bool {
return r == ' ' || r == ','
}
4 、字符串的使用细节:
1 go 语言的字符串的字节使用 utf-8 编码;
2 )与 python 一样,一旦字符串赋值了,就不能被更改;
3 )两种表示形式
1 )双引号,会识别转义字符;
2 )反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防
止攻击,输出源代码等
package main
import (
"fmt"
)
func main() {
var c = "abc\nabc"
var d = `abc\nabc`
fmt.Println(c)
fmt.Println(d)
}

相关文章:

  • MCU ADC参考电压变化怎么办?
  • 宝马中国再度深化AI布局,宣布正式接入DeepSeek技术
  • 【创新实训个人博客】数据库搭建
  • AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
  • 重合闸的作用与技术解析
  • Server-Side Request Forgery服务器端请求伪造(ssrf)
  • PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
  • PDF嵌入图片
  • 新闻数据接口开发指南:从多源聚合到NLP摘要生成
  • Linux的例行性工作(crontab)
  • 自动驾驶(ADAS)领域常用数据集介绍
  • Windows 安装 Yarn 的教程
  • 4.2.2 MySQL索引原理以及SQL优化
  • LangChain构建大模型应用之RAG
  • java-mybatis01
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • 中国纪检监察报刊文:要让劳动最光荣成为社会的崇高风尚
  • 一周观展|五一假期将到,特展大展陆续开幕
  • 财政部部长蓝佛安:中国将采取更加积极有为的宏观政策
  • 印巴在克什米尔实控线附近小规模交火,巴防长发出“全面战争”警告
  • 最高法:“盗链”属于信息网络传播行为,构成侵犯著作权罪
  • 国防部就美军“压力测试”大演习答澎湃:中国从来不信邪,不怕打,不怕压