字符串
基本使用
ASCII码:1B
其它字符:2-4B
中文编码:3B
声明和初始化
var str string
str = "hey boy"
//or
str1 := "hey , bro"
格式化输出
fmt.Printf("the length of \"%s\" is %d \n",str,len(str))
转义字符
- 换行:
\n
- 回车:
\r
- 制表符:
\t
- Unicode字符:
\u
- 反斜杠:
\\
多行字符串
results := `Search results for "Golang":
- Go
- Golang
Golang Programming
`
fmt.Printf("%s", results)
或者使用+
连接:
results := "Search results for \"Golang\":\n" +
"- Go\n" +
"- Golang\n" +
"- Golang Programming\n"
fmt.Printf("%s", results)
不可变值类型
字符串可以通过数组下标方式访问其中的字符,一旦初始化后,内容不能修改
字符串操作
连接:
str = str + ", over"
str += ", over"
str = str +
", over"
切片:
左闭右开区间
str := "hello, world"
str1 := str[:5]
fmt.Println("str1:", str1)
字符串遍历
str := "Hello, 世界"
n := len(str)
for i := 0; i < n; i++ {
ch := str[i] // 依据下标取字符串中的字符,ch 类型为 byte
fmt.Println(i, ch)
}
//or
for i, ch := range str {
fmt.Println(i, ch) // ch 的类型为 rune
}
底层字符类型:
-
byte
UTF-8中单个字节的值uint8
的别名 -
rune
Unicode中单个字符int32
的别名
将Unicode编码转换为字符:
str := "Hello, 世界"
for i, ch := range str { //这里的ch类型为rune
fmt.Println(i, string(ch))
}
UTF-8编码按照上述方法转换会变乱码,因为一个中文字符编码需要三个字节。
字符串转化为数值类型:strconv
包
v1 := "100"
v2, _ := strconv.Atoi(v1) // 将字符串转化为整型,v2 = 100
v3 := 100
v4 := strconv.Itoa(v3) // 将整型转化为字符串, v4 = "100"
v5 := "true"
v6, _ := strconv.ParseBool(v5) // 将字符串转化为布尔型
v5 = strconv.FormatBool(v6) // 将布尔值转化为字符串
v7 := "100"
v8, _ := strconv.ParseInt(v7, 10, 64) // 将字符串转化为整型,第二个参数表示进制,第三个参数表示最大位数
v7 = strconv.FormatInt(v8, 10) // 将整型转化为字符串,第二个参数表示进制
v9, _ := strconv.ParseUint(v7, 10, 64) // 将字符串转化为无符号整型,参数含义同 ParseInt
v7 = strconv.FormatUint(v9, 10) // 将字符串转化为无符号整型,参数含义同 FormatInt
v10 := "99.99"
v11, _ := strconv.ParseFloat(v10, 64) // 将字符串转化为浮点型,第二个参数表示精度
v10 = strconv.FormatFloat(v11, 'E', -1, 64)
q := strconv.Quote("Hello, 世界") // 为字符串加引号
q = strconv.QuoteToASCII("Hello, 世界") // 将字符串转化为 ASCII 编码