package main

import "fmt"

// 外部定义的变量不能使用 :=,这些变量不是全局变量,是包内部变量
var ii = 123
var ss = "abc"

// 还可以都把变量放在括号里,少写一些var
var (
    ii1 = 456
    ss1 = "def"
)

// 初始值,不像C语言定义的变量初始值不确定
func variableZeroValue() {
    var i int
    var s string
    fmt.Printf("%d %q", i, s) // 0 ""
}

// 赋初值
func variableInitialValue() {
    var ia, ib int = 3, 4
    var s string = "abc"
    fmt.Println(ia, ib, s)
}

// 编译器自动判断类型
func variableTypeDeduction() {
    var ia, ib, b, s = 3, 4, true, "abc"
    fmt.Println(ia, ib, b, s)
}

// 省略var,使用 :=定义一个变量,但是赋值的时候就不能在加冒号了
func variableShorter() {
    ia, ib, b, s := 3, 4, true, "abc"
    ia = 30
    fmt.Println(ia, ib, b, s)
}

func main() {
    fmt.Println(ii, ss, ii1, ss1)
    variableShorter()
}