随笔
主页
  • Unity
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
  • 数据库

    • Redis
  • Html 文档
  • CSS 文档
  • Vue 文档
  • TypeScript
  • Golang
  • 版本控制

    • Git 文档
    • Svn 文档
  • 技术文档

    • Markdown语法
    • GitHub技巧
    • Nodejs
  • 分类
  • 标签
  • 时间线
  • 目录结构
  • 配置和约定
  • 主题配置
  • 首页配置
  • front matter
  • 目录页配置
  • 摘要
  • 主题颜色
  • 评论栏
  • Markdown扩展
GitHub
主页
  • Unity
  • 前端文章

    • JavaScript
    • Vue
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
  • 数据库

    • Redis
  • Html 文档
  • CSS 文档
  • Vue 文档
  • TypeScript
  • Golang
  • 版本控制

    • Git 文档
    • Svn 文档
  • 技术文档

    • Markdown语法
    • GitHub技巧
    • Nodejs
  • 分类
  • 标签
  • 时间线
  • 目录结构
  • 配置和约定
  • 主题配置
  • 首页配置
  • front matter
  • 目录页配置
  • 摘要
  • 主题颜色
  • 评论栏
  • Markdown扩展
GitHub
  • 基本语法

    • 变量声明
    • 变量初始化
      • 变量初始化的标准格式
      • 编译器推导类型的格式
      • 短变量声明并初始化
  • Golang
  • 基本语法
dong
2021-09-24

变量初始化

# 变量初始化

# 变量初始化的标准格式

    var 变量名 类型 = 表达式
1

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

    var hp int = 100 // hp 为变量名,类型为 int,hp 的初始值为 100。
1

100 和 int 同为 int 类型,int 可以认为是冗余信息,因此可以进一步简化初始化的写法。

# 编译器推导类型的格式

将 int 省略后,编译器会尝试根据等号右边的表达式推导 hp 变量的类型。

    var hp = 100
1

等号右边的部分在编译原理里被称做右值(rvalue)

例子

    var attack = 40
    var defence = 20
    var damageRate float32 = 0.17
    var damage = float32(attack-defence) * damageRate
    fmt.Println(damage)
1
2
3
4
5

# 短变量声明并初始化

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

    hp := 100
1

这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。

注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。

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

    // 声明 hp 变量
    var hp int
    // 再次声明并赋值
    hp := 10 // 报错: no new variables on left side of := (在“:=”的左边没有新变量出现,意思就是“:=”的左边变量已经被声明了。)
1
2
3
4

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

    conn, err := net.Dial("tcp","127.0.0.1:8080")
    // net.Dial 提供按指定协议和地址发起网络连接,这个函数有两个返回值,一个是连接对象(conn),一个是错误对象(err)。如果是标准格式将会变成:
    var conn net.Conn
    var err error
    conn, err = net.Dial("tcp", "127.0.0.1:8080")
1
2
3
4
5

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

    // 下面的代码片段,编译器不会报 err 重复定义。
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    conn2, err := net.Dial("tcp", "127.0.0.1:8080")
1
2
3
#golang
变量声明

← 变量声明

Theme by Vdoing | Copyright © 2021-2023 Evan Dong MIT License | 粤ICP备2021052092号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×