[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