[TOC]
# 字符串string
string里存储的是字符按照utf8编码后的 `8-bit bytes` 二进制数据,通常但不一定表示UTF-8编码的文本。
>[warning] 注意:
> 1. 字符串可以为"",但不能为nil
> 2. 字符串类型的值是不可变的
> 3. 字符串的值 必须使用 **双引号** 包裹。
1. 定义赋值
```go
name := "xiaoming"
fmt.Printf("My name is %s\n", name)
// name[0] = "x" //非法操作
name = "jiaxzeng" //重新赋值合法
```
2. 查看字符串长度
`len()` 函数返回的字符串长度。
```go
name := "jiaxzeng,您好"
fmt.Println(len(name))
```
3. 字符串转义符
| 转义符 | 含义 |
| :-: |:-: |
| \n | 换行符 |
| \r | 回车符(返回行首)|
| \t | 制表符(tab键) |
| \' | 单引号 |
| \" | 双引号 |
| \\ | 反斜线 |
打印 Windows 平台下的路径
```go
// 实现方法一
// codePath := "D:\\code\\Golang"
// fmt.Println(codePath)
// 实现方法二
codePath := `D:\code\Golang`
fmt.Println(codePath)
```
4. 多行字符串
反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出.
```go
gushi := `
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
`
fmt.Println(gushi)
```
# string常用操作
| 方法 | 说明 |
| :-: |:-: |
| len(str) | 返回字符串的长度 |
| + 或 fmt.Sprint | 拼接字符串(适用于字符串) |
| strings.Split | 分割 |
| strings.contains | 判断字符串是否包含字符 |
| strings.HasPrefix,strings.HasSuffix | 匹配开头、结尾 |
| strings.Index(),strings.LastIndex() | 匹配字符出现的序号 |
| strings.Join(a[]string, sep string) | 拼接字符串(适用于切片) |
```go
// len
name := "jiaxzeng"
fmt.Println(len(name)) // 8
// + 或 fmt.Sprint 适用于字符串
name := "jiaxzeng"
s1 := "您好"
// s := name + s1
s := fmt.Sprint(name, s1)
fmt.Println(s) // jiaxzeng您好
// strings.Split
codePath := "D:\\code\\Golang"
codePathSli := strings.Split(codePath, "\\")
fmt.Println(codePathSli) //[D: code Golang]
// strings.Contains
name := "jiaxzeng"
fmt.Println(strings.Contains(name, "x")) // true
fmt.Println(strings.Contains(name, "o")) // false
// strings.HasPrefix,strings.HasSuffix
name := "jiaxzeng"
fmt.Println(strings.HasPrefix(name, "jia")) //true
fmt.Println(strings.HasSuffix(name, "eng")) //true
// strings.Index(),strings.LastIndex()
s := "fsjlfscescw jlfw fjwla fdj"
fmt.Println(strings.Index(s, "j")) // 2
fmt.Println(strings.LastIndex(s, "j")) // 25
// strings.Join(a[]string, sep string) 适用于切片
codePath := "D:\\code\\Golang"
codePathSli := strings.Split(codePath, "\\")
Path := strings.Join(codePathSli, "\\")
fmt.Println(Path) // D:\code\Golang
```
# 字符
组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号 `'` 包裹起来
1. 定义
```go
var by1 = '广'
var by2 = 'G'
```
2. 打印字符
```go
var by1 = '广'
var by2 = 'G'
fmt.Println(by1) // 24191
fmt.Printf("%c %T\n", by2, by2) // G int32
```
# Printf占位符
总结这里出现的占位符
| 占位符 | 描述 |
| :-: | :-: |
| %c | 打印字符 |
- Golang简介
- 开发环境
- Golang安装
- 编辑器及快捷键
- vscode插件
- 第一个程序
- 基础数据类型
- 变量及匿名变量
- 常量与iota
- 整型与浮点型
- 复数与布尔值
- 字符串
- 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 流程控制语句
- 获取用户输入
- if分支语句
- for循环语句
- switch语句
- break_continue_goto语法
- 高阶数据类型
- pointer指针
- array数组
- slice切片
- slice切片扩展
- map映射
- 函数
- 函数定义和调用
- 函数参数
- 函数返回值
- 作用域
- 函数形参传递
- 匿名函数
- 高阶函数
- 闭包
- defer语句
- 内置函数
- fmt
- strconv
- strings
- time
- os
- io
- 文件操作
- 编码
- 字符与字节
- 字符串
- 读写文件
- 结构体
- 类型别名和自定义类型
- 结构体声明
- 结构体实例化
- 模拟构造函数
- 方法接收器
- 匿名字段
- 嵌套与继承
- 序列化
- 接口
- 接口类型
- 值接收者和指针接收者
- 类型与接口对应关系
- 空接口
- 接口值
- 类型断言
- 并发编程
- 基本概念
- goroutine
- channel
- select
- 并发安全
- 练习题
- 第三方库
- Survey
- cobra