目录
我们不论在学习什么语言中,我们都要去认识一下这个语言中的数据类型,当然学习Go也不例外,我们也要去认识一下其相关的数据类型,当然这些数据类型基本上是大同小异的,如果学之前一些语言的学习经验的话,在理解学习起来将会更加的迅速。
在Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。
整形
基本整型
Go语言中的整型分为有符号和无符号两类:
- 按长度分有符号整型:int8、int16、int32、int64
- 按长度分无符号整型:uint8、uint16、uint32、uint64。
uint8byteint16shortint64long
特殊整型
特殊整型在这里指的是两种一般对应特定CPU平台机器字大小的有符号和无符号整数int和uint;其中int是应用最广泛的数值类型。这两种类型都有同样的大小,32或64bit,但是我们不能对此做任何的假设;因为不同的编译器即使在相同的硬件平台上可能产生不同的大小;以及说是还有一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方
len()intintuint
package main
import (
"fmt"
)
func main() {
var a int
var b int32
var c uint = 10
a = 2147483647
b = -2147483648
fmt.Print(a, b, c)
}
浮点型
Go语言支持两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。
IEEE 754float323.4e38math.MaxFloat32float641.8e308math.MaxFloat64
fmt%f
package main
import (
"fmt"
"math"
)
func main() {
var a float64
a = 5.923871
fmt.Print(a)
fmt.Printf("\n%f\n", math.Pi)
fmt.Printf("%.5f\n", math.Pi)
}
布尔型
!!truefalse(!true==false)==truex==true
booltrue(真)false(假)
布尔值可以和&&(AND)和||(OR)操作符结合,并且有短路行为:如果运算符左边值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值,因此下面的表达式总是安全的:
s != "" && s[0] == 'x'
&&||
布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换:
i := 0
if b {
i = 1
}
false
字符型
新手须知:字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括byte值0,但是通常是用来包含人类可读的文本。文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)序列
UTF-8双引号(")
字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:
s1 := "Hello"
s2 := "World"
字符串转义符
Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。
多行字符串
反引号
s := `第一行
第二行
第三行
...
第n行
`
fmt.Println(s)
反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。
字符串的常用操作
复数
Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。
内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部:
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
var x complex128 = complex(1, 2) // 1+2i
var y complex128 = complex(3, 4) // 3+4i
fmt.Println(x*y)
fmt.Println(real(x*y))
fmt.Println(imag(x*y))
fmt.Println(c1)
fmt.Println(c2)
注:
- 复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
- 复数也可以用==和!=进行相等比较。只有两个复数的实部和虚部都相等的时候它们才是相等的,所以需要小心的处理其精度的问题