02.内建变量类型
在 Go 语言中,内建变量类型、强制类型转换和浮点数操作是非常重要的概念。
内建变量类型
Go 语言有多种内建变量类型,包括基本类型和复合类型。
基本类型
- 布尔型:
bool
(值为true
或false
) - 整型:
- 有符号整型:
int8
,int16
,int32
,int64
- 无符号整型:
uint8
(别名byte
),uint16
,uint32
,uint64
- 特殊整型:
int
,uint
(根据平台不同,可能是 32 位或 64 位),uintptr
- 无长度 int 的实际长度取决于操作系统位数(32/64)
uintptr 为指针类型
- 无长度 int 的实际长度取决于操作系统位数(32/64)
- 有符号整型:
- 浮点型:
float32
,float64
- 复数型:
complex64
,complex128
- complex 为复数(1+1i)
- 字符串:
string
-
byte,rune
rune 为 Go 语言的字符型相当于其他语言的 char ,长度为4字节 int32
复合类型
- 数组:
[n]T
- 切片:
[]T
- 映射:
map[K]V
- 结构体:
struct { ... }
- 指针:
*T
- 通道:
chan T
- 函数:
func(...T) T
强制类型转换
golang有严格的类型匹配,不同的类型之间通常需要手动转换(interface类型除外),编译器不会进行自动转换
修改后:
浮点数进度
浮点数有两种表示方式:float32
和 float64
,分别表示 32 位和 64 位的浮点数。float64
提供更高的精度。
浮点数运算会丢失精度,解决方法很多,在测试代码中提供了一种,思路为:如果要保留m位小数,对m + 1位加0.5后四舍五入
代码
package main import ( "fmt" "math" "math/cmplx" ) func variableZeroValue() { //赋空值 var a int var s string fmt.Printf("%d %q\n", a, s) } func variableInitialValue() { //初始变量,Go语言非常严格,定义了就要用到 //定义多个变量可赋初值也可不赋 var a, b int = 3, 4 var s string = "abc" fmt.Println(a, b, s) } func variableTypeDeduction() { //推断类型 var a, b, c, d = 3, 4, true, "def" println(a, b, c, d) } func variableShorter() { a, b, c, d := 3, 4, true, "def" b = 7 fmt.Println(a, b, c, d) } var name = "jj" var age = 24 var ( name1 = "aa" age1 = 22 ) func euler() { //验证欧拉公式 fmt.Printf("%.3f\n", cmplx.Exp(1i*math.Pi)+1) //cmplx.Pow(math.E, 1i*math.Pi) + 1) } func triangle() { var a, b int = 3, 4 var c int c = int(math.Sqrt(float64(a*a + b*b))) fmt.Println(c) } func main() { fmt.Println("Hello World") variableZeroValue() variableInitialValue() variableTypeDeduction() variableShorter() fmt.Println(name, age) fmt.Println(name1, age1) euler() triangle() }