Go语言中可以使用反引号或者双引号来定义字符串。
双引号:字符串使用双引号括起来,其中相关的转义字符将被替换。
反引号:字符串使用反引号括起来,其中相关的转义字符不会被替换。
创建字符串字面量,程序清单如下:
package main
import(
"fmt"
)
func main(){
s:="I am an interpreted string literal"
fmt.Println(s)
}
运行结果如下:
I am an interpreted string literal
使用rune字面量,程序清单如下:
package main
import(
"fmt"
)
func main(){
s:="After a backslash, certain single character escapes represent special values\nn is a line feed or new line \n\t t is a tab"
fmt.Println(s)
}
运行结果如下:
After a backslash, certain single character escapes represent special values
n is a line feed or new line
t is a tab
原始字符串字面量,程序清单如下:
package main
import(
"fmt"
)
func main(){
s:=`After a backslash, certain single character escapes represent special values
n is a line feed or new line
t is a tab`
fmt.Println(s)
}
运行结果如下:
After a backslash, certain single character escapes represent special values
n is a line feed or new line
t is a tab
将多个字符串拼接成一个,程序清单如下:
package main
import(
"fmt"
)
func main(){
s:="Oh sweet ignition"+" be my fuse"
fmt.Println(s)
}
运行结果如下:
Oh sweet ignition be my fuse
使用复合赋值运算符拼接字符串,程序清单如下:
package main
import(
"fmt"
)
func main(){
s:="Can you hear me?"
s+="\nHear me screamin'?"
fmt.Println(s)
}
运行结果如下:
Can you hear me?
Hear me screamin'?
只能拼接类型为字符串的变量,如果将整数和字符串进行拼接将导致编译错误。Go标准库提供了strconv包,使用itoa来完成这种办法。
将其它类型转换为字符串,程序清单如下:
package main
import(
"fmt"
"strconv"
)
func main(){
var i int =1
var s string=" egg"
intToString:=strconv.Itoa(i)
var breakfast string=intToString+s
fmt.Println(breakfast)
}
运行结果如下:
1 egg
使用缓冲区接拼字符串,程序清单如下:
package main
import(
"fmt"
"bytes"
)
func main(){
var buffer bytes.Buffer
for i:=0;i<500;i++{
buffer.WriteString("z")
}
fmt.Println(buffer.String())
}
运行结果如下:
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
将字符串转换为小写,程序清单如下:
package main
import(
"fmt"
"strings"
)
func main(){
fmt.Println(strings.ToLower("VERY IMPORTANT MESSAGE"))
}
运行结果如下:
very important message
查找子串,程序清单如下:
package main
import(
"fmt"
"strings"
)
func main(){
fmt.Println(strings.Index("surface","face"))
fmt.Println(strings.Index("moon","aer"))
}
运行结果如下:
3
-1
删除有开头和末尾的空白,程序清单如下:
package main
import(
"fmt"
"strings"
)
func main(){
fmt.Println(strings.TrimSpace("I don't need all this space"))
}
运行结果如下:
I don't need all this space
计算字符串长度
遍历字符串——获取每一个字符串元素
获取字符串的某一个字符
修改字符串
连接字符串
格式化
示例:Base64编码——电子邮件的基础编码格式
代码如下:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
message := "Away from keyboard. https://golang.org/"
encodedMessage := base64.StdEncoding.EncodeToString([]byte(message))
fmt.Println(encodedMessage)
data, err := base64.StdEncoding.DecodeString(encodedMessage)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(data))
}
}
运行结果如下:
QXdheSBmcm9tIGtleWJvYXJkLiBodHRwczovL2dvbGFuZy5vcmcv
Away from keyboard. https://golang.org/
示例:从INI配置文件中查询需要的值
字符口中拼接:
1、直接使用运算符
2、mt.Sprintf()
3、strings.Join()
4、bytes.Buffer
5、strings.Builder
UTF-8编码
中文字符占用三个字符 。英文字母占用一个字节。
代码如下:
package main
import (
t "tools"
)
func main() {
s := "我们OK。"
t.Printfln("s的长度:%v", len(s))
byteSlice := []byte(s)
t.Printfln("byteSlice:%v", byteSlice)
runeSlice := []rune(s)
t.Printfln("runeSlice: %v,runeSlice的长度:%v", runeSlice, len(runeSlice))
t.Printfln("%08b", uint8(230))
}
运行结果如下:
[Running] go run "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go\main.go"
s的长度:11
byteSlice:[230 136 145 228 187 172 79 75 227 128 130]
runeSlice: [25105 20204 79 75 12290],runeSlice的长度:5
11100110
[Done] exited with code=0 in 19.531 seconds
在Go语言中,rune类型实际上是uint32类型的别名,32个二进制位表示的无符号整数,由于每个字节有8个二进制位。rune类型是由4个字节组成。
用rune对字符串进行遍历
代码如下:
package main
import (
t "tools"
)
func main() {
s := "大家都说nice。"
for i := 0; i < len(s); i++ {
t.Printfln("字节序号: %d,内容: %v,类型: %T", i, s[i], s[i])
}
t.Printfln("------------")
for i, v := range s {
t.Printfln("字节序号: %d,内容: %v,类型: %T", i, v, v)
}
t.Printfln("------------")
runeSlice := []rune(s)
for i := 0; i < len(runeSlice); i++ {
t.Printfln("字节序号: %d,内容: %v,类型: %T", i, runeSlice[i], runeSlice[i])
}
t.Printfln("------------")
for i, v := range runeSlice {
t.Printfln("字节序号: %d,内容: %v,类型: %T", i, v, v)
}
}
运行结果如下:
[Running] go run "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go\main.go"
字节序号: 0,内容: 229,类型: uint8
字节序号: 1,内容: 164,类型: uint8
字节序号: 2,内容: 167,类型: uint8
字节序号: 3,内容: 229,类型: uint8
字节序号: 4,内容: 174,类型: uint8
字节序号: 5,内容: 182,类型: uint8
字节序号: 6,内容: 233,类型: uint8
字节序号: 7,内容: 131,类型: uint8
字节序号: 8,内容: 189,类型: uint8
字节序号: 9,内容: 232,类型: uint8
字节序号: 10,内容: 175,类型: uint8
字节序号: 11,内容: 180,类型: uint8
字节序号: 12,内容: 110,类型: uint8
字节序号: 13,内容: 105,类型: uint8
字节序号: 14,内容: 99,类型: uint8
字节序号: 15,内容: 101,类型: uint8
字节序号: 16,内容: 227,类型: uint8
字节序号: 17,内容: 128,类型: uint8
字节序号: 18,内容: 130,类型: uint8
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 3,内容: 23478,类型: int32
字节序号: 6,内容: 37117,类型: int32
字节序号: 9,内容: 35828,类型: int32
字节序号: 12,内容: 110,类型: int32
字节序号: 13,内容: 105,类型: int32
字节序号: 14,内容: 99,类型: int32
字节序号: 15,内容: 101,类型: int32
字节序号: 16,内容: 12290,类型: int32
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 1,内容: 23478,类型: int32
字节序号: 2,内容: 37117,类型: int32
字节序号: 3,内容: 35828,类型: int32
字节序号: 4,内容: 110,类型: int32
字节序号: 5,内容: 105,类型: int32
字节序号: 6,内容: 99,类型: int32
字节序号: 7,内容: 101,类型: int32
字节序号: 8,内容: 12290,类型: int32
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 1,内容: 23478,类型: int32
字节序号: 2,内容: 37117,类型: int32
字节序号: 3,内容: 35828,类型: int32
字节序号: 4,内容: 110,类型: int32
字节序号: 5,内容: 105,类型: int32
字节序号: 6,内容: 99,类型: int32
字节序号: 7,内容: 101,类型: int32
字节序号: 8,内容: 12290,类型: int32
[Done] exited with code=0 in 24.409 seconds