<1>Golang基础进阶——变量

Golang变量

1. 声明变量

1 var a int
2 var b string
3 var c []float32
4 var d func() bool
5 var e struct{
6     x int
7 }

2. 变量的几种声明形式

2.1. 标准格式

var 变量名 变量类型

2.2. 批量格式

var (
    var a int
    var b string
    var c []float32
    var d func() bool
    var e struct{
        x int
    }
)

3. 初始化变量

Go语言再声明变量时,自动对变量对应的内存区进行初始化操作。每个变量会初始化其默认值:

  • 整型和浮点型变量的默认值为0
  • 字符串变量的默认值为空字符串
  • 布尔型变量默认为bool
  • 切片、函数、指针变量的默认为nil

 3.1. 标准格式

var 变量名 类型 = 表达式

例如:
var hp int = 100

3.2. 编译器推导式类型的格式

在标准格式基础上,省去int编译器会尝试根据等号右边的表达式推导hp变量的类型。

var hp2 = 100

 示例:

package main
import "fmt"

var attack = 40 var defence = 20 // damageRate 如果不指定变量类型则为float64 var damageRate float32 = 0.17 var damage = float32(attack-defence) * damageRate func main() { fmt.Println(damage) }

3.3. 短变量声明并初始化

package main

import "fmt"

func main() {
    attack := 40
    fmt.Println(attack)
}

 注意:由于使用了" := ",而不是赋值的 " = ",因此推导声明写法的变量必须是没有定义过的变量。

 如果hp已经被声明过,但依然使用" := "时编译器会报错,代码如下:

package main

import "fmt"

func main() {
    var attack int
    attack := 40
    fmt.Println(attack)
}
no new variables on left side of :=

短变量的声明在开噶中的例子较多,比如:

conn, err := net.Dial("tcp","127.0.0.1:8080")

net.Dial 是按照指定协议和地址发起的网络连接,这个函数有两个返回值,一个是连接对象,一个是err对象。如果是标准格式将会变成:

var conn net.Conn
var err error
conn, err = net.Dial("tcp","127.0.0.1:8080")

在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即使其他变量名可能是重复声明的,编译器也不会报错,代码如下:

conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn2, err := net.Dial("tcp", "127.0.0.1:8080")

 3.4. 多重赋值

func main() {
var w1, w2 int
w1, w2 = 1, 2
fmt.Println(w1, w2)
}

 

4. 匿名变量

匿名变量的表现是一个" _ "下划线。匿名变量不占用命名空间不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。


package main

import "fmt"

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

func main() {
a, _ := GetData()
_, b := GetData()

fmt.Println(a, b)

}


// 代码输出如下:
100 200

 

posted @ 2020-04-01 18:14  Wshile  阅读(167)  评论(0编辑  收藏  举报