Go基本类型
-
布尔型:bool
-
- 长度:1bit
-
- 取值范围:true,false
-
- 注意事项:不可以用数字代替true或者false
-
整型:int/uint
-
- 根据运行平台可能为32或者64位
-
8位整型:int8/uint8
-
- 长度:1字节
-
- 取值范围:-128~127/0~255
-
字节型:byte(uint8别名)
-
16位整型:int16/uint16
-
- 长度:2字节
-
- 取值范围:-32768~32767/0~65535
-
64位整型:int64/uint64
-
- 长度:8字节
-
- 取值范围:-2^64/2~2^64/2-1 / 0~2^64-1
-
浮点型:float32/float64
-
- 长度:4/8字节
-
- 小数位:精确到7/15小数位
-
unicode字符:rune
-
复数:complex64/complex128
-
- 长度:8/16字节
-
足够保存指针的32位或64位整数型:uintptr
-
其他值类型:
-
- array、struct、string
-
引用类型:
-
- slice(切片)、map(简单理解hash表)、chan(通道)
-
接口类型:interface
-
函数类型:func - 在Go函数可以赋值给变量
类型的零值
零值并不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值类型的默认值为0,bool为false,string为空字符串
代码验证
var _int int fmt.Println("init[int]:", _int) var _float32 float32 fmt.Println("init[float32]:", _float32) var _string string fmt.Println("init[string]:", _string) var _bool bool fmt.Println("init[int]:", _bool) var _array []int fmt.Println("init[array int ]:", _array) var _array10 [10]int fmt.Println("init[array int 10]:", _array10) var _arraybool [10]bool fmt.Println("init[array bool 10]:", _arraybool)
输出
init[int]: 0init[float32]: 0init[string]: init[int]: falseinit[array int ]: []init[array int 10]: [0 0 0 0 0 0 0 0 0 0]init[array bool 10]: [false false false false false false false false false false]
检查类型是否溢出
fmt.Println("[math.MinInt32]:", math.MinInt32) fmt.Println("[math.MaxInt32]:", math.MaxInt32)// 输出[math.MinInt32]: -2147483648[math.MaxInt32]: 2147483647
类型的别名
中文别名类型
type ( 文本 string)// 使用var b 文本b = "中文类型名"fmt.Println(b)
单个变量的生命与赋值
- 变量的声明格式: var <变量名称> <变量类型>
- 变量的赋值格式:<变量名称> = <表达式>
- 声明的同时赋值:var <变量名称> [变量类型] = <表达式>
**注意:**在声明时赋值可以不填写类型,由编译器进行推断
var value int = 1 fmt.Println(value) // 最简写方式 - 注意:全局变量不能使用 value2 := 1 fmt.Println(value2)
不同形式的意义
多个变量的声明与赋值
- 全局变量的声明可使用var 的方式进行简写
- 全局变量的声明不可以省略var,但可以并行方式(括号方式)
- 所有变量都可以使用类型推断
- 局部变量不可以使用var的方式简写,只能使用并行方式
自己编写的例子
var a, b, c, d int = 1, 2, 3, 4 fmt.Println(a) fmt.Println(b) fmt.Println(c) fmt.Println(d)// 输出1234
给出的例子
// 多个变量的声明var a,b,c,d int// 多个变量的赋值a,b,c,d = 1,2,3,4//多个变量生命同时赋值var a,b,c,d int = 1,2,3,4// 省略变量类型,由系统推断var a,b,c,d = 1,2,3,4// 多个变量声明与复制的最简写法a,b,c,d := 1,2,3,4// 忽略a,_,c,d := 1,2,3,4
:=
主要应用在函数返回多个返回值
变量的类型转换
- Go中不存在隐式转换,所有类型转换必须显式声明
- 转换只能发生在两种互相兼容的类型之间
- 类型转换的格式:
-
- <ValueA> [:]= <TypeOfValueA>(<ValueB>)
// 在相互u兼容的两种类型直接进行转换var a float32 = 1.1b := int(a)// 以下表达式无法通过编译var c bool = trued := bool(c)
自己编写的测试
var f float32 = 100.1 g := int(f) fmt.Println(g) // 输出100 h := bool(f) fmt.Println(h) // 编译报错:cannot convert f (type float32) to type bool
作业编写
var i = 65 j := string(i) fmt.Println(j) k := strconv.Itoa(i) fmt.Println(k)// 输出A65
补充说明
从严格意义上讲 type newint int
,这里newint并不能说是int的别名,而只是底层数据结构相同,在这里称为自定义类型,在进行类型转换时,仍旧需要显示转换,但是byte和rune确确实实为uint8和int32的别名,可以相互进行转换。有关于自定义类型将在后面的教程进行讲解。