1.1. 声明变量

Go语言作为C语言家族的新派代表,在C语言的定义方法和类型上做了优化和调整,更加灵活易学,Go语言的每一个变量都拥有自己的类型,必须声明才能开始用。

package main

var a1 int              // 声明一个整数类型的变量
var b1 string           // 声明一个字符串类型的变量
var c1 []float32        // 声明一个32位浮点类型的变量,浮点切片表示由多个浮点类型组成的数据结构

// 声明一个返回为布尔类型的函数变量,这种形式一般用于回调函数,即将函数以变量的形式保存下来。需要的时候重新调用这个函数
var d1 func() bool

var e1 struct{          // 声明一个结构体类型的变量,这个结构体拥有一个整型的x字段
    x int
}


// 批量声明变量
var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

1.1.1. 初始化变量

/**
每个变量初始化类型都有一个默认值:

1.整型和浮点型变量的默认值为0
2.字符串变量的默认值为空字符串
3.布尔型变量默认为bool
4.切片、函数、指针变量的默认为nil
*/

1.1.2. 标准格式

/**
var 变量名 类型 表达式
*/
var hp int = 100

1.1.3. 编译器自己推导类型的格式

编译器会尝试根据等号右边的表达式推导hu变量的类型

var hu = 200

var num1 = 30
var num2 = 20
var damageRate float32 = 0.17

var damage = float32(num1-num2) * damageRate

func main() {
    fmt.Println(hu)
    fmt.Println(damage)     //输出结果:1.7
}

1.1.4. 短变量声明并初始化

hp :=100
// 省略var,注意:=左侧的变量不应该是已经声明过的,否则会导致编译错误。
/**
net.Dial是提供按照指定协议和地址发起网络连接,这个函数有两个返回值,一个是连接对象,一个是err对象。
 */
var conn net.Conn
var err error
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn1, err := net.Dial("tcp", "127.0.0.1:8080")

多个变量同时赋值

编程最简单的算法之一,莫过于变量交换。

package main

import "fmt"

var a int = 100
var b int = 200

func main() {
    b, a = a, b
    fmt.Println(a, b)   //200 100
}

匿名变量-没有名字的变量

/**
匿名变量

匿名变量不占用命名空间,不会分配内存,匿名对象与匿名对象之间也不会因为多次声明而无法使用
*/

func GetData() (int, int) {
    return 100, 200
}

func main() {
    a, _ := GetData()
    _, b := GetData()
    fmt.Println(a, b)       //100 200
}

1.1.5. 函数变量可见性

可见性:

1)声明在函数内部,是函数的本地值,类似private

2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect

3)声明在函数外部且首字母大写是所有包可见的全局值,类似public