欢迎关注李培冠博客

https://lpgit.com

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 变量命名规范

  1. 变量只能由字母、数字、下划线组成。
  2. 不能以数字开头。
  3. 不能是Go中的关键字及保留字
  4. 大小写区分,a := 1A := 1是两个变量。

以上要求是必须满足的,下面的要求要尽量做到

  1. 变量名要有描述性,要简洁、易读,不宜过长。
  2. 变量名不能使用中文以及拼音。
  3. 推荐使用的变量名:
    • 下划线: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

『Go基础』第7节 变量的更多相关文章

  1. 『Go基础』第8节 格式化输出

    输出就是将数据信息打印到电脑屏幕上. 本节我们就来学习一下Go语言中的三种输出方式: Print().Println().Printf(). 1.Print() Print()主要的一个特点就是打印数 ...

  2. 『Python基础』第4节:基础数据类型初识

    本节只是对基础数据类型做个简单介绍, 详情会在之后慢慢介绍 什么是数据类型? 我们人类可以分清数字与字符串的区别, 可是计算机不能. 虽然计算机很强大, 但在某种程度上又很傻, 除非你明确告诉它数字与 ...

  3. 『Go基础』第5节 第一个Go程序

    本节我们来学习写一个最简单的Go程序: 打印 Hello Go. 第一个Go程序, 只要跟着做, 留下个印象就可以. 用Goland创建一个 hello_go.go 文件(后缀为 .go ). 文件内 ...

  4. 『Go基础』第6节 注释

    在上一节中, 我们学会了怎样写一个 Hello Go . 但是, 大家有可能还没有明白为什么那么写, 下面我们通过注释来了解一下. 注释的重要性不再过多赘述, 一段不写注释的代码读起来实在难受. 那么 ...

  5. 『Python基础』第39节 函数的返回值

    1. 函数的返回值 ​ 一个函数就是封装一个功能, 这个功能一般都会有一个最终结果的. ​ 比如写一个登录的函数, 最终登录是否成功你总得告诉我一声吧? ​ 还有咱们之前也用过 len() 这个函数, ...

  6. 『Python基础』第7节:基本运算符

    一. 基本运算符 运算按种类可以分为: 算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算. 今天我们只学习算数运算.比较运算.逻辑运算.赋值运算.成员运算 1.1 算数运算 以下假设 ...

  7. 『Python基础』第20节:深浅copy

    一. 赋值运算 l1 = [1, 2, 'conan', [11, 22]] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 'conan', [11, 22]] p ...

  8. 『Python基础』第8节:格式化输出

    现在有一个需求, 询问用户的姓名, 年龄, 工作, 爱好, 然后打印成以下格式 ************ info of Conan ************ name: Conan age: 23 ...

  9. 『Python基础』第1节 Windows环境下安装Python3.x

    一. Python安装 1. 下载安装包 https://www.python.org/downloads/release/python-374/ # 3.7安装包 # 如需安装python2.7版本 ...

随机推荐

  1. 利用 PHP CURL zip压缩文件上传

    $postData['file'] = "@".getcwd()."/../attachment/qianbao/{$customer_id}.zip"; $t ...

  2. Android入门教程(五)

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 欢迎大家关注我的微信公众号:「醉翁猫咪」 字面量: 1.整数字面量为整型(int) 2.小数字面量为双精度浮点型(double) ...

  3. DDL 语言

    数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化查询语言)的组成部分. SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数 ...

  4. 「PKUSC2018」PKUSC

    传送门 Solution  考虑求每个点的贡献 等价于一个以OA长为半径的圆心为原点的圆在多边形内的弧对应的角度/\(2\pi\) 求弧度可以利用三角剖分 在原点的点要特判,采用射线法就可以了 Cod ...

  5. svg入门详解

    一.svg是什么? SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 是使用 XML 来描述二维图形和绘图程序的语言. SVG 图像在放大或改变尺寸的情况下其图 ...

  6. TCP的拥塞窗口和快速恢复机制的一些备忘及一点想法

    rwnd(窗口,代表接收端的处理能力).cwnd(拥塞窗口,从发送端看当前网络整体承载能力).ssthresh(快速增长切换成慢速增长的界限值) 1.慢启动,是指数增长(对面确认多少个包,就增加多少) ...

  7. JetBrainsIDEA-structure结构继承的图标说明

    图标3表示重写继承类中方法 图标2表示实现继承类抽象方法或接口中的方法 图标1表示未使用继承类中的方法 类中方法并非只统计显示继承类或实现接口中方法,而是对该类中所有方法进行分类,有可能某些方法是继承 ...

  8. NPOI导出EXCEL样式

    public void Export(DataRequest<ExportModel> request, DataResponse<dynamic> response) { t ...

  9. Shell流程控制语句while

    while语法格式: while 判断条件 do 命令 done while语句流程控制图: 实例: [root@youxi1 ~]# vim a.sh #!/bin/bash i=0 while [ ...

  10. 【翻译】Flink Table Api & SQL —— Overview

    本文翻译自官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/ Flink Table Api & ...