美文网首页
Go语言之变量的初始化二

Go语言之变量的初始化二

作者: DreamKing | 来源:发表于2019-02-27 11:11 被阅读0次

Go 语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值(也就是说每个变量都对应着一个初始化默认值),例如:

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

当然,依然可以在变量声明时赋予变量一个初始值。

变量初始化的标准格式

var 变量名 类型 = 表达式

例如,游戏中,玩家的血量初始值为100。可以这样写:

var hp int = 100

等号右边的部分在编译原理里被称做右值(rvalue)。
下面是编译器根据右值推导变量类型完成初始化的例子。

var attack = 40
var defence = 20
var damageRate float32 = 0.17
var damage = float32(attack-defence) * damageRate
fmt.Println(damage)

代码说明如下:

  • 第 1 和 2 行,右值为整型,attack 和 defence 变量的类型为 int。
  • 第 3 行,表达式的右值中使用了 0.17。Go 语言和C语言一样,编译器会尽量提高精确度,以避免计算中的精度损失。
    默认情况下,如果不指定 damageRate 变量的类型,Go 语言编译器会将 damageRate 类型推导为 float64。由于这个例子中不需要 float64 的精度,所以强制指定类型为 float32。
  • 第 4 行,将 attack 和 defence 相减后的数值结果依然为整型,使用 float32() 将结果转换为 float32 类型,再与 float32 类型的 damageRate 相乘后,damage 类型也是 float32 类型。
    提示:damage 变量的右值是一个复杂的表达式,整个过程既有 attack 和 defence 的运算还有强制类型转换。强制类型转换会在后面的章节中介绍。
  • 第 5 行,输出 damage 的值。
    以上代码输出结果为:
3.4

短变量声明并初始化

var 的变量声明还有一种更为精简的写法,例如:

hp := 100

这是 Go 语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。
注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。

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

// 声明 hp 变量
var hp int
// 再次声明并赋值
hp := 10

编译报错如下:

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")

上面的代码片段,编译器不会报err重复定义。

本文学习来源于C语言中文网>Go语言教程

相关文章

  • Go语言笔记 | 03-变量的声明和初始化

    Go语言笔记 | 03-变量的声明和初始化 变量声明 在 go 语言中声明一个变量一般要用到关键字 var,变量声...

  • 【Golang 基础】Go 语言的变量与常量

    Go 语言的变量与常量 变量声明,初始化与赋值 (示例代码) 变量的声明格式:var <变量名称> [变量类型];...

  • GO

    一、基础 1.变量 强类型语言 声明单个变量Go语言在声明变量时,自动对变量对应的内存进行初始化操作,不同于C语言...

  • Go语言-变量

    摘自Go语言指南 变量的初始化 变量声明可以包含初始值,每个变量对应一个。如果初始化值已存在,则可以省略类型;变量...

  • Go语言常量和变量

    变量 Go语言变量的定义 定义变量的格式(先定义再初始化)var 数据名称 数据类型数据名称 = 值; 定义变量的...

  • Go语言之变量的初始化二

    Go 语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值(也就是说每个变量都...

  • Go 学习

    go语言局部变量分配在栈还是堆Golang 垃圾回收剖析go语言坑之for range

  • golang的helloworld

    go语言初识 go语言的变量

  • Go 语言基础--变量&数据类型

    go 变量 Golang 变量声明和初始化比起其他语言要简单一些,并且丰富不少。语法: var identifie...

  • Go 语言变量(二)

    值类型和引用类型 所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的...

网友评论

      本文标题:Go语言之变量的初始化二

      本文链接:https://www.haomeiwen.com/subject/qgexuqtx.html