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

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)
}
http://www.xdnf.cn/news/2470.html

相关文章:

  • 洞悉 NGINX ngx_http_access_module基于 IP 的访问控制实战指南
  • 《代码整洁之道》第12章 迭进 - 笔记
  • apkpure 谷歌插件 下载的apk包
  • array和模板进阶(详细使用)
  • ElasticSearch从入门到精通-覆盖DSL操作和Java实战
  • python实战项目65:drissionpage采集boss直聘数据
  • Nacos简介—4.Nacos架构和原理一
  • AI在医疗领域的10大应用:从疾病预测到手术机器人
  • vue3子传父——v-model辅助值传递
  • AI大模型从0到1记录学习 linux day21
  • 第三次作业
  • android10 卸载应用出现回退栈异常问题
  • Java求职者面试:从Spring Boot到微服务的技术深度探索
  • C++ RAII
  • 【今日三题】笨小猴(模拟) / 主持人调度(排序) / 分割等和子集(01背包)
  • Python 数据可视化进阶:精准插入图表到指定 Excel 工作表
  • gRPC 的使用和了解
  • HK1RBOX K8 RK3528 Via浏览器_插件_央视频的组合验证(失败)
  • Simulink与C的联合仿真调试
  • 解读和分析mysql性能数据时,如何确定性能瓶颈的具体位置?
  • 贪心算法-跳跃游戏II
  • Godot开发2D冒险游戏——第三节:游戏地图绘制
  • 来自B站-AI匠的“RAG的prompt设计指南“的部分截图
  • idea软件配置移动到D盘
  • Linux日志分析:安全运维与故障诊断全解析
  • 【PCL】实现CloudCompare的连通域点云聚类功能
  • 闭包与装饰器(python)
  • 机器学习——Seaborn练习题
  • Python教程(二)——控制流工具前半部分
  • 《代码整洁之道》第5章 格式 - 笔记