『Go基础』第7节 变量
欢迎关注李培冠博客
1. 什么是变量?
我们应该怎么去理解变量? 在这里我要举一个例子:
大家应该都知道王者荣耀这个游戏. 当我们在玩王者荣耀的时候, 我们操控的英雄的血量是不断变化的, 这个血量是存在内存中的. 那么这个血量就是一个变量.
在程序运行的过程中, 其值可以改变的量, 我们就称为变量.
通过上面例子可以发现:
- 变量是存储在内存中的
- 变量是可以改变的
我们说变量是存储在内存中, 那么内存又是什么呢?
内存是一个连续的数据集合, 每一个内存存储区域都有一个唯一的地址标识, 称为内存地址. 就好比我们的身份证一样, 每个人都有一个唯一的身份证.
我们知道了变量是什么, 那么在Go语言中, 变量应该如何定义呢?
2. 变量
2.1 变量的定义
Go最基本的变量定义方式是使用 var
关键字, 其基本格式为:
var 变量名 数据类型
变量的声明以关键字
var
开头, 行尾不需要分号
比如说, 我们定义一个名称为 hp
, 类型为 int
的变量:
var hp int // int表示为整型
我们来声明一个变量并打印一下看看:
package main
import "fmt"
func main() {
// 使用 var 定义一个变量, 注意: 变量类型要放在变量名后面
var hp int
fmt.Println(hp)
}
// 结果:
0
奇怪? 我都没有给hp一个具体的值, 怎么打印出来为0呢?
其实, 这是Go的一个特点: 当我们在声明一个变量的时候, 如果没有初始值, Go会给其一个对应类型的默认值.
既然这样, 我们就给hp
一个值吧.
package main
import "fmt"
func main() {
// 使用 var 定义一个变量, 注意: 变量类型要放在变量名后面
var hp int
hp = 100 // 赋值操作
fmt.Println(hp)
}
// 结果:
100
当然了, 我们也可以在声明的时候直接给 hp
一个值:
var hp int = 100 // 定义变量并初始化值
如果我们仅仅定义一个变量而没有去使用它, 那么Go就会报错.
2.2 定义多个变量
// 定义两个个类型都是int的变量
var hp, mp int
既然可以同时定义多个变量, 那么也能同时初始化多个变量
/*定义两个类型都是"int"的变量, 并且分别初始化为相应的值
hp为100, mp为260
*/
var hp, mp int = 100, 260
2.3 自动推导类型
有没有发现当我们定义变量时有一些繁琐, 需要写类型
, Go允许我们不写 类型
, 它会自动帮我们推导出数据对应的类型:
var hp, mp = 100, 260
有人说了, 那个 var
能不能也去了, 每次都要写, 好麻烦的. 没问题, Go也允许你:
/*定义两个变量,它们分别初始化为相应的值
hp为100, mp为260
编译器会根据初始化的值自动推导出相应的类型
*/
hp, mp := 100, 260 // 注意这里有个冒号 :
现在是不是感觉非常简洁了. :=
这个符号直接代替了变量的定义及赋值.
hp := 100
// 等价于下面两行
var hp int
hp = 100
不过它有一个限制, 那就是它只能用在函数内部; 在函数外部使用则会无法编译通过, 所以一般用var
方式来定义全局变量.
2.4 匿名变量
_
(下划线)为匿名变量, 它会丢弃对应数据不进行处理. 匿名变量配合函数的返回值使用才有价值, 目前大家先知道其语法即可.
在下面的例子中, 我们将值 2
赋予 b
, 丢弃 3
_, b := 3, 2
匿名变量不占用命名空间, 不会分配内存.
匿名变量与匿名变量之间也不会因为多次声明而无法使用.
2.5 变量命名规范
- 变量只能由字母、数字、下划线组成。
- 不能以数字开头。
- 不能是Go中的关键字及保留字
- 大小写区分,
a := 1
和A := 1
是两个变量。
以上要求是必须满足的,下面的要求要尽量做到
- 变量名要有描述性,要简洁、易读,不宜过长。
- 变量名不能使用中文以及拼音。
- 推荐使用的变量名:
- 下划线:my_name = 'Conan'
- 驼峰体:MyName = 'Conan'
Go语言中的25个关键字:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
Go语言中的37个保留字:
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
最新文章
- 服务发现与健康监测框架Consul-DNS转发的应用
- 【改】IOS-百度地图API用点生成线路、导航、自定义标注 2013年11月更新
- SCU 2941 I NEED A OFFER!(01背包变形)
- HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
- CentOS 6.6 nginx PHP 配置
- ws318 配置
- jQuery中的DOM操作<;思维导图>;
- PHP开发圣经读书笔记01
- 分布式助手Zookeeper(一)
- 前端MVVM学习之KnockOut(一)
- 《Shell十三问》笔记(上)
- Spring MVC 项目搭建 -4- spring security-添加自定义登录页面
- bzoj 4008: [HNOI2015]亚瑟王
- JS基础之传参(值传递、对象传递)
- C# 中Web.config文件的读取与写入
- Chrome刷新缓存
- python爬虫点触验证码的识别思路(图片版)
- Python之数学题目练习
- 三种css样式表及其优先级
- Ubuntu创建新用户并设置权限
热门文章
- 使用singer tap-postgres 同步数据到pg
- zabbix显示 get value from agent failed:cannot connetct to xxxx:10050:[4] interrupted system call
- 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)
- 如何在Unity中开发Leap Motion桌面版(Non-VR)APP
- rust-vmm 学习
- git下载指定分支到本地
- App数据指标
- rk3288 usb无线网卡支持 8188eu
- Python装饰器之functools.wraps的作用
- Vue.js实现tab切换效果