前言
文章内容总结自b站视频。
数据类型
GO语言中有如下几种数据类型:布尔型(bool)、数字类型(分为整型和浮点型)、字符串类型(string)和派生类型(包括:(a)指针类型、 数组类型、结构化类型、 管道类型、函数类型、切片类型、接口类型以及Map 类)。
布尔类型
布尔类型经常用在条件判断、循环和逻辑表达式中。
数字类型
Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
Go也有基于架构的类型,例如:int、uint 和uintptr。
这些类型的长度都是根据运行程序所在的操作系统类型所决定的:
- int 和 uint 在32位操作系统上,它们均使用32位(4个字节),在64位操作系统上,它们均使用64位(8个字节)。
- uintptr 的长度被设定为足够存放一个指针即可。
Go 语言中没有 float 类型。(Go语言中只有 float32 和 float64)没有double类型。
与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出
整数类型
浮点类型
复数类型
- 复数类型有两种:
complex64和complex128
。前者实部和虚部的大小分别为32位,后者实部和虚部的大小分别为64位。 - 定义方式举例:
var c complex64 = 1 + 2i
。
字符串类型
- Go语言中的字符串是一个任意字节的常量序列,类似于C++里面的
const char []
。 - 字符串字面量使用双引号
“”
或者反引号’
来创建。双引号用来创建可解析的字符串,支持转义,但不能用来引用多行;反引号用来创建原生的字符串字面量,可能由多行组成,但不支持转义,并且可以包含除了反引号外其他所有字符。双引号创建可解析的字符串应用最广泛,反引号用来创建原生的字符串则多用于书写多行消息,HTML以及正则表达式。
字符串连接方式
- 使用
+
连接。 - 使用
fat
中的Sprintf()
函数连接,参数设置和Printf
类似,区别为Sprintf
输出一个字符串类型的返回值,Printf
输出字符串到终端。 - 使用
strings.Join()
连接。举例:strings.Join([]string{s1, s2, s3}, "X")
,其中,s1、s2和s3表示要连接的字符串,X表示连接的符号。这种方式先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数组的情况下,这种效率会很高,但是本来没有,去构造这个数据的代价比较高。 - 使用
bytes.WriteString()
。这个比较理想,可以当成可变字符使用,对内存的增长也有优化,如果能预估字符事的长度,还取以用buffer.Grow()
接口来设置capacity
。举例:var buffer bytes.Buffer buffer.WriteString("tom") buffer.WriteString(", ") buffer.WriteString("100") fmt.Printf("buffer.String() : %v\n", buffer.String())
- 使用
strings.Builder()
,使用方式和bytes的类似。
字符串的切片操作
- 使用
[n1:n2]
对字符串进行切片操作,区间为左开右闭,即取到的切片范围为n1到n2-1。可以缺省左值或者右值,表示取到字符串的左端或者右端。当然也可以使用[n]
方式取一个字符。 - 示例
s := "hello world" s1 := s[1:3] // el s2 := s[0] // h s3 := s[1:] // ello world s4 := s[:11] // hello world