go语言严格来说一共有9种不同大小的类型,无符号4有符号4 uintptr类型,用于底层编程
其中int8 int16 int32 int64 不同大小的有符号类型整数对应 8 16 32 64 大小的有符号整型数。对应无符号整型分别是uint8 uint16 uint32 uint64。除了指定整型位数外,也可以直接使用int uint
go语言可以根据不同平台的实现对int做出调整,int32 int64 uint 同理
go语言中所有类型声明格式都是一样的
var value1 inter32
func main(){
value2 :=64
}
int int8 不是同一个类型,俩种类型不能直接比较,不能直接运算。如果需要对俩种不同类型的值执行运算操作,需要转换类型。
整型的运算。
go语言的整型支持常规整数运算,加减乘除%求余
5 % 3
x,y := 2,4
if x== y {
fmt.println("x等于y")
}
上面是一个if判断流程,当X等于y输出“x等于y",否则什么都不输出。
package main
import "fmt"
var (
x int32
y int32
// y int64
)
func main() {
x, y = 2, 4
if x == y {
fmt.Println("x等于y")
} else {
fmt.Println("x不等于y")
}
// if x == 1 || y == 4 {
// fmt.Println("x等于y")
// }
}
编译不通过的if语言是因为尝试比较两个不同的类型,自然不能通过。编译通过的if语言中,字面常量2虽然看起来相等,但所表示的其实不同的类型,在编译运行是,这两个字面常量都会被转换为相应的类型。
if x == 999999 || y == 2 {
fmt.print()
}
此时也报错,因为越界
go语言整型数据也支持位运算
浮点型 用于表示包含小数点的数据,比如3.14就是一个浮点型数据。go语言提供了两种精度的浮点数,float32 float64.float32精确到小数点后7位,float64精确到小数点后15位。由于精度不同的缘故,在使用判读时需要注意
由于math包中所有有关数学运算的函数有要求接受float64类型,
package main
import (
"fmt"
"reflect"
)
func main() {
var value1 float64
value1 = 1
value2 := 2
value3 := 3.0
v := value1 + value3
fmt.Println(value1, value2, value3, v)
fmt.Println("v的类型是", reflect.TypeOf(2))
}
使用了reflect.TypeOf(),反射的概念。
浮点型的运算
package main
import "fmt"
func main() {
var value1 float64
value1 = 1
value2 := 1.0000000000000000000000001
if value1 == value2 {
fmt.Println("相等")
} else {
fmt.Println("不等")
}
}
精度影响大小,float64是小数点后15位,float32是小数点后7位。之后的数字就会被舍弃从而相等。
复数
我们把a+bi,a,b均为实数,类型为浮点型的数称为复数,其中a称为实部,b称为虚部,i称为书序单位
complex64 32位实数和虚数 complex128 64位实数和虚数
package main
import "fmt"
var value1 float64
func main() {
var v1 complex64
v1 = 3.2 + 12i
v2 := 3.2 + 12i //默认是comlpex128
v3 := complex(3.2, 12)
v := v2 + v3
fmt.Println(v1, v2, v3, v)
// if v2 == v3 {
// fmt.Println("类型相等")
// } else {
// fmt.Println("不等")
// }
}
v1和v2属于长度不通,不能==,编译报错。
v1实部和虚部为float32类型,v2,v3虽然不使用方法定义,但是返回的结果其实是相等的
package main
import "fmt"
func main() {
v2 := 3.2 + 12i
v3 := complex(3.2, 12)
v := v2 + v3
fmt.Println(v2, v3, v)
vr := real(v)
vi := imag(v)
fmt.Printf("v的实部%v,v的虚部%v", vr, vi)
}
默认的格式化输出,占位符%v,除非输出其他与默认不同的格式,否则都可以使用%v,但是不推荐
bool %t
int int8 %d
float complex64 %g string %s chan %p pointer %p
更多关于复数的函数可查阅math/cmplx标准库的文档,复数支持常规数学运算,但因为实部和虚部否是浮点型,在使用==,!=比较时。需要注意数字精度,cmath包中包含了一些操作复数的公共方法,除非是对内存有严格颜值的程序,否则建议complex128 ,减少后续类型转换的操作