go(3)变量的应用与数据类型

一.静态语言和动态语言

* 静态类型语言和强类型语言是同一个意思,表示在编译期就确定了类型,而且类型是不可以改变的
* 动态类型语言和弱类型语言是同一个意思,表示在运行过程中才能确定,且内容是什么类型变量类型跟随变化

# 二.Go语言变量简介
* Go语言和其他语言一样都有基本存储容器.可以存储一个或多个值在程序中,方便程序中多次使用容器中内容,这个容器称为:**变量**
* Go语言虽然是静态类型语言,但是支持动态类型语言语法,因为Go语言希望程序员少声明变量,增加GC效率
# 三.变量命名规则
* 以字母或下划线开头(Go语言中多不以_开头)

* 后面可以是任意数量的字符、数字和下划线

* 区分大小写

* 不能是关键字(关键字具备特定含义),下面是Go语言的关键字
  |  关键字如下   |             |        |           |        |
  | :------: | :---------: | :----: | :-------: | :----: |
  |  break   |   default   |  func  | interface | select |
  |   case   |    defer    |   go   |    map    | struct |
  |   chan   |    else     |  goto  |  package  | switch |
  |  const   | fallthrough |   if   |   range   |  type  |
  | continue |     for     | import |  return   |  var   |
* 先声明后赋值(声明后开辟内存,不同类型变量都有不同初值)
```go
//语法:
//1. 声明
var 变量名 类型
//2. 赋值
变量名=值
//示例:
var smallming string
smallming = "英文名"
```
* 声明并赋值(此方式不建议)
```go
//语法:
var 变量名 类型 = 值

```
* 短变量(只能在函数内使用)
```go
//语法:
变量名 := 值
//示例:
smallming := "英文名"
```

# 五.声明多个变量和赋值

* 先声明后赋值
```go
func main() {
    var a, b, c int
    a, b, c = 1, 2, 3
}
```
* 声明时赋值
```go
func main() {
    var a, b, c, d = 1, 2, 3, false
    fmt.Println(a, b, c, d)
}
```

* 声明并赋值,推荐方式

```go
func main() {
    var (
        a = 1
        b = true
        c = "测试"
    )
    fmt.Println(a, b, c)
}
```
* 使用短变量给多个变量赋值时,必须要保证至少有个变量是没有声明的
```go
func main() {
    var (
        a = 1
        b = true
        c = "测试"
    )
    //短变量操作多个值时只要保证里面至少有一个新变量
    b, c, d := false, "smallming", 3
    fmt.Println(a, b, c, d)
}
```
# 三.浮点运算
* float32和float64之间不可以相互运算,需要进行类型转换
```go
func main() {
    var a float32 = 1.5
    var b float64 = 3.3         //默认是float64类型
    fmt.Println(a + float32(b)) //float64向float32转换
    fmt.Println(float64(a) + b) //float32向float64转换
}
```
* 建议使用float64,虽然占用空间多,但是float32在累计运算时可能出现误差
* 整型运算和浮点型运算结果类型为本身类型