go字符串string类型简述(10)

请输入图片描述

字符串也可以作为算数运算,比如拼接。字符串也可以作为关系运算。赋值运算。可以通过索引获取。字符串定义内容必须是ascii,可以作为切片。而切片必须配置一个start和end。通常,我们可以使用len来获取字符串长度,并且可以使用len(string)-1来获取字符串最后一位

定义字符串

我们在定义字符串的时候,使用双引号和反引号来赋值

var name string = "mark"
var desc string = `我是字符串`
fmt.Println(name,desc)

双引号是可解释的字符串,反引号是原生字符串

[root@marksugar /opt/Golang]# go run string.go
mark 我是字符串

在字符串中有一些特殊字符,如:n,f,t,r,b,v

var name string = "matrk"
var desc string = `我是t字符串`
fmt.Println(name,desc)

这里的t是一个tab,也就是4个空格

[root@marksugar /opt/Golang]# go run string.go
ma rk 我是t字符串

算数运算

可以使用+进行字符串的链接

var name string = "mark"
var desc string = `是字符串`
fmt.Println(name+desc)

运行

[root@marksugar /opt/Golang]# go run string.go
mark是字符串

关系运算

关系运算分为:==,!=,>,>=,<,<=

fmt.Println("a" == "b") 是否等于
fmt.Println("a" != "b") 是否不等于
fmt.Println("a" < "b") 是否小于
fmt.Println("a" > "b") 是否大于
fmt.Println("aa" <= "b") 是否小于等于
fmt.Println("a" >= "bb") 是否大于等于

运算大小比较是根据ASCII 码,从左到右进行比较:

[root@marksugar /opt/Golang]# go run string.go
false
true
true
false
true
false

赋值运算

s := "my name is "
s += "mark"
fmt.Println(s)

运算

[root@marksugar /opt/Golang]# go run string.go
my name is mark

索引

索引计算是0-n-1,n是字符串长度.

desc = "abcdefg"
fmt.Printf("%T %cn",desc[0],desc[0])

desc[0],0对应a,从左到右,索引类型是uint8,这里打印使用的是%c运行

[root@marksugar /opt/Golang]# go run string.go
uint8 a

切片

字符串定义内容必须是ascii

切片是从哪里到哪里,比如:从1到3--desc = "abcdefg",从左到右,1到3则是bc,切片类型string,这里打印使用的是%s

   fmt.Printf("%T %sn",desc[start:end],desc[start:end])

end不能超过字符串的长度

fmt.Printf("%T %sn",desc[1:3],desc[1:3])

运行

[root@marksugar /opt/Golang]# go run string.go
string bc

!!! 字符串定义内容必须是ascii是因为在切片或者索引的时候会出现乱码,特别是在中文字符的时候。如下:

desc = "我我我"
fmt.Printf("%T %cn",desc[0],desc[0])
fmt.Printf("%T %sn",desc[1:3],desc[1:3])

运行:

[root@marksugar /opt/Golang]# go run string.go
uint8 æ
string

字符串长度

字符串长度也需要是ascii码,才能精准计算,而中文字符可能使用到三到四个字节。

desc = "abcdefg"
fmt.Println(len(desc))
desc = "我我我"
fmt.Println(len(desc))

运行

[root@marksugar /opt/Golang]# go run string.go
7
9

所以这里desc = "我我我"len计算是9。而中文字符串有其他方式。

去掉最后一位

如果你要取最后一位则是len(desc)-1)

desc = "abcdefg"
fmt.Println("desc:",len(desc))
fmt.Println("desc:",len(desc)-1)

如下:

[root@marksugar /opt/Golang]# go run string.go
desc: 7
desc: 6