Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。内建函数和自然的书写方式。
x := complex(1, 2) //内建函数
y := 1 + 2i //自然书写
// real返回实部,imag返回虚部
fmt.Println(x, y, real(x), imag(x), real(y), imag(y))
打印结果:(1+2i) (1+2i) 1 2 1 2
2.3.4 布尔型
一个布尔类型的值只有两种:true和false。布尔值不会隐式转换为数值0或1。布尔值可以和&&、||操作符结合,并且可能会有短路行为。如果运算符左边已经可以确定整个布尔表达式的值,那么右边的表达式将不再求值。
var s string
//s = "mazhiguo"
if s != "" && s[0] == 'm' {
fmt.Println("OK")
} else {
fmt.Println("error")
}
2.3.5 字符串
1 字符串常用操作
在Go语言中字符串也是一种基本类型。一个字符串是一个不可改变的字节序列。常用的字符串操作如下表所示:
运算
含义
备注
s1+s2
字符串连接
len(s)
字符串长度
字符串中的字节数,不是字符数
s[i]
取字符
索引i不能越界
s[i:j]
取子字符串
左闭右开,包含s[i],不包含s[j]。子字符串是一个新的字符串。
i,j都可能被忽略,忽略时,从0开始,最后一个字符结束。
s := "hello " + "world"
fmt.Println(len(s))// 11
fmt.Println(s[0], s[len(s)-1])//104 100 (h 和 d)
fmt.Println(s[1:4])//"ell"
fmt.Println(s[:5])//"hello"
fmt.Println(s[6:])//"world"
fmt.Println(s[:])//"hello world"
2 字符串值不可变
字符串的值是不可变的:一个字符串包含的字节序列永远不会被改变,当然我们可以给一个字符串变量分配一个新字符串值。
s := "hello world"
s[0] = "H" //这是错误演示,字符串序列不能修改
s = "Hello" //给字符串变量s重新赋值
3 字符串遍历
字符串遍历支持以字节的方式遍历和以字符的方式遍历。
s := "hello 世界"
n := len(s)
//以字节的方式遍历
for i := 0; i < n; i++ {
fmt.Println(i, s[i])
}
//以字符的方式遍历
for i, ch := range s {
fmt.Println(i, ch)
}
打印结果:
0 104
1 101
2 108
3 108
4 111
5 32
6 228
7 184
8 150
9 231
10 149
11 140
0 104
1 101
2 108
3 108
4 111
5 32
6 19990
9 30028
4转义序列
在一个双引号包含的字符串字面值中,可以用反斜杠\开头的转义序列插入任意的数据。
常见的ASCII控制代码的转义方式:
\a
响铃
\b
退格
\f
换页
\n
换行
\r
回车
\t
水平制表符
\v
垂直制表符
\’
单引号
\”
双引号
\\
反斜杠
5原生字符串字面值