
#### 先看都有那些数据类型
|类型|描述|
|-------|-------|
|uint|32位或64位|
|uint8| 无符号 8 位整型 (0 到 255)|
|uint16|无符号 16 位整型 (0 到 65535)|
|uint32|无符号 32 位整型 (0 到 4294967295)|
|uint64|无符号 64 位整型 (0 到 18446744073709551615)
|int|32位或64位
|int8|有符号 8 位整型 (-128 到 127)
|int16|有符号 16 位整型 (-32768 到 32767)
|int32|有符号 32 位整型 (-2147483648 到 2147483647)
|int64|有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
|byte|uint8的别名(type byte = uint8)
|rune|int32的别名(type rune = int32),表示一个unicode码
|uintptr |无符号整型,用于存放一个指针是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
|float32 |IEEE-754 32位浮点型数
|float64 |IEEE-754 64位浮点型数
|complex64|32 位实数和虚数
|complex128|64 位实数和虚数
# 一、 基本数据类型相互转换
olang和Java/C不同,Golang在不同类型的变量之间赋值时需要**显式转换**。也就是Golang中数据类型不能**自动转换**。
> 基本语法:
表达式var_type(var_name) 将值v转换为类型var_type
var_type:就是数据类型,比如int32, int64, float32等等
var_name:就是需要转换的变量
```go
type MyInt int64
func TestImplicit(t *testing.T) {
var a int = 1
var b int64
var c MyInt
b = int64(a)
// b = c // 别名也不允许隐式类型转换
fmt.Print(a, b, c)
}
```
# 二、 类型的预定义值
+ math.MaxInt64
+ math.MaxFloat64
+ math.MaxUint32
# 三、 记录与其它语言的区别
### 1. 数据类型
1. 不支持任何形式的隐式类型转换
2. 支持指针,但不支持指针运算
3. string 默认不是空字符串""
### 2. 运算符
1. Go语言没有前置++、--
2. 用==比较数组
1. 相同纬度且含有相同个数元素的数组才能进行比较
2. 每个元素都相同的才相等
3. 按位清零 `&^`
> 此运算符特点:
1、如果右侧是0,则左侧数保持不变
2、如果右侧是1,则左侧数一定清零
3、功能同a&(^b)相同
### 3. 条件和循环
1. Go仅支持循环关键字 for
2. if 支持变量负值
``` go
if var declaration; condition {
}
```
3. switch 条件
1. 条件表达式不限制为常量或者整数;
2. 单个case中,可以出现多个结果选项,使用逗号分割;
3. 与Java等语言相反,Go语言不需要用break来明确退出一个case;
1. 可以不设定switch之后的条件表达式,在此情况下,整个switch结构与多个if...else...的逻辑作用相等
Go--数据类型、运算符