第二章 变量、常量和数据类型 (5)

Go语言提供了两种精度的复数类型:complex64complex128,分别对应float32float64两种浮点数精度。内建函数和自然的书写方式。

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 布尔型

一个布尔类型的值只有两种:truefalse。布尔值不会隐式转换为数值01。布尔值可以和&&||操作符结合,并且可能会有短路行为。如果运算符左边已经可以确定整个布尔表达式的值,那么右边的表达式将不再求值。

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原生字符串字面值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfxs.html