基础类型-1
Go语言内置的类型有:
- 布尔类型:bool
- 整型:int8、byte、int16、int、unint、uintptr等
- 浮点类型:float32、float64
- 复数类型:complex64、complex128
- 字符串:string
- 字符类型:rune
- 错误类型:error 此外Go语言还支持以下复合类型:
- 指针:pointer
- 数组:array
- 切面:slice
- 字典:map
- 通道:chan
- 结构体:struct
- 接口:interface
布尔类型
Go语言中的布尔类型与其他语言基本一致,关键字bool,可赋值为预定义的true和false实例如下:
var a bool
a=true
b:=(1==2) // b可推导为bool类型
注意:布尔类型不接受其他类型的赋值,不支持自动或者强制类型转换。
整型
整型是所有编程语言最基本的类型,Go语言支持如下的整型类型:
- 类型表示 需要注意的是int和int32在Go语言中被认为是两种不同的类型,编译器不会自动帮你做类型转换,比如如下会有编译错误:
var a int32
b := 64 //b会自动推导为int类型
a = b //编译错误
编译错误类似于: cannot use value1 (type int) as type int32 in assignment。 可以使用强制类型转换
a = int32(b) //编译通过
当然,在做强制类型转换时,需要注意数据长度被截短而发生的数据精度损失(比如将浮点数强制转为整数)和值溢出(值超过转换的目标类型的值范围时)问题。
- 数值运算 Go语言支持下面的常规整数运算:+、一、*、/和%加减乘除就不详细解释了,需要说下的是,% 和在C语言中一样是求余运算,比如:
7 % 3 // 结果为:1
- 比较运算 Go语言支持以下的几种比较运算符:>、<、==、>=、<=和!=。与大多数其他语言相同。 注意:两个不同类型的的整数是不能比较的,这个现实中事实一致,必须换算成相同的类型才能比较,比如int8类型的数和int类型的数不能直接比较,但各种类型的整型变量都可以直接与字面常量(literal)进行比较。
var i int32
var j int64
i, j = 1, 2
if i == j {
// 编译错误
fmt.Println("i and j are equal.")
}
if i == 1 || j == 2 {
// 编译通过
fmt.Println("i and j are equal.")
}
- 位运算
Go语言支持以下位运算:
浮点型
浮点型用于表示包含小数点的数据,比如1.339就是一个浮点型数据。Go语言中的浮点类型采用IEEE-754标准的表达方式。
- 浮点数表示 Go语言中表示浮点类型有float32和float64,其中float32等价于C语言中的float类型,float64等价于c语言的double类型。在Go语言中定义浮点类型变量如下:
var fvalue1 float32
fvalue1 = 12
fvalue2 := 12.0 // 如果不加小数点,fvalue2会被推导为整型而不是浮点型
- 浮点数比较 因为浮点数不是一种精确的表达方式,所以像整型那样直接用==来判断两个浮点数是否相等是不可行的。 浮点型的比较推荐如下表示:
import "math"
// p为用户自定义的比较精度,比如0.00001
func IsEqual(f1, f2, p float64) bool {
return math.Fdim(f1, f2) < p
}
复数类型
复数其实由两部分组成,一个表示实部(real),一个表示虚部(imag)。
- 复数表示
var value1 complex64 //由2个float32构成的复数类型
value1 = 3.2 + 12i
value2 := 3.2 + 12i //value2是complex128类型
value3 := complex(3.2, 12) // value3结果同 value2
- 实部和虚部 对于一个复数z = complex(x, y),就可以通过Go语言内置函数real(z)获得该复数的实部,也就是x,通过imag(z)获得该复数的虚部,也就是y。
字符串
在Go语言中字符串也是一种基本类型,Go语言中字符串的声明非常简单如下:
var str string // 声明一个字符串变量
str = "my name is Go" // 字符串赋值
ch := str[0] // 取字符串的第一个字符
字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内容不能在初始化后被修改,如下:
str := "my name is Go" // 字符串也支持声明时进行初始化的做法
str[0] = 'H' // 编译错误
- 常见字符串操作
- 字符串遍历 Go语言支持两种方式遍历字符串,一种是以字节数组的方式遍历如下:
str := "Hello,世界"
n := len(str)
for i := 0; i < n; i++ {
ch := str[i] // 依据下标取字符串中的字符,类型为byte
fmt.Println(i, ch)
}
另一种是Unicode字符遍历
str := "Hello,世界"
for i, ch := range str {
fmt.Println(i, ch)//ch的类型为rune
}
字符类型
在Go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值;另一个是rune,代表单个Unicode字符。
备注
本文正在参与「掘金Golang主题学习月」, 点击查看活动详情。