Go语言小白笔记-(04)变量

18942317505 · · 624 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

四:变量 ======== 1:什么叫变量 ------------- 在前面的讲解案例中,我们是让计算机输出数据到屏幕上,那么有同学可能就要问了,怎样让计算机保存我们通过键盘输入的数据呢?这就要用到变量了。 所谓的变量简单的理解就是计算机用来存储数据的。我们可以理解变量就像我们去超市买商品时用到的购物车,我们先将商品从货架上拿下来,放到购物车中,结账时在从购物车中取出商品。计算机通过变量来保存数据实际上将数据存储到计算机的内存中,这里我们可以画一个图给大家理解一下。 ![image.png](https://static.studygolang.com/190626/20466e04c0fa8fb6d58c2b052f42ec64.png) 计算机将内存划分成不同的区域,数据就是存储在这些区域中,那么怎样从这些区域中将数据取出来呢?计算机将每块区域都加上了一串数字,作为编号。通过该编号就可以将数据取出来了,但是问题是,这一串数字对我们程序员来说是非常难记忆的, 为了解决这个问题,我们可以通过变量的方式来表示存储的数据,如下图: ![image.png](https://static.studygolang.com/190626/a271ff530f748f517a3ca1cc1fad8220.png) 我们给每个存储区域加上了Number1,Number2,Name等符号,这样通过这些符号来存储数据,然后通过这些符号取出数据就非常容易,方便了。这些符号就是变量。 2:变量类型 ----------- 我们现在理解了变量可以用来存储数据,但是我们要存储的数据类型是各种各样的,例如:整数,小数,文本等等。所以我们必须在定义变量时就要告诉计算机,定义的变量存储是什么类型的数据。那么在内存中就可以根据不同的类型来开辟不同的存储空间。 生活中关于“类型“的例子: ![image.png](https://static.studygolang.com/190626/100d0b0cb1e6aa62dddcffba745a0322.png) 关于GO语言中的有哪些类型,我们后面会具体讲解。下面我们先看一下怎样声明变量? 3:变量声明 ----------- 所谓声明变量就是创建一个变量,并且指定该变量存储什么类型的数据。 Go语言引入了关键字var,而类型信息放在变量名之后,示例如下: ![image.png](https://static.studygolang.com/190626/8e1a89b3bec5c22de8da3b613577760a.png) 注意:这里的输出是先将变量a的值取出来,然后在打印在屏幕上。所以不能给a这个变量加上引号。 4:变量初始化 ------------- 现在我们虽然已经完成变量的定义了,但是该变量中存储的值,并不是我们想要的,我们希望变量中存储的是我们想要的值,应该怎么办? 我们可以在定义变量时,就给变量赋值,这种方式就是变量的初始化。示例如下: ![image.png](https://static.studygolang.com/190626/c2674110a919b3ca4f91f97d46f6b470.png) 注意:在这里我们将”=”符号,读作“赋值号”,不能读作“等号”。 问题:以下的程序输出的结果是多少? var c int =20 fmt.Println(“c”) 同时再次强调一下在这里输出变量c的值,所以不能给变量c加上双引号。 5:变量赋值 ----------- 除了在定义变量时,完成初始化以外,我们也可以在变量定义完后,再给变量赋值,也就是先声明后赋值,示例如下: ![image.png](https://static.studygolang.com/190626/863b7142ff8df2f4a8cae7e855fd1439.png) 注意:上面的输出语句也可以只使用一个Println函数,具体如下:fmt.Println(a,b),中间用逗号进行分割 问题1:以下程序的输出结果是多少? ![image.png](https://static.studygolang.com/190626/241bc422ea11e41318cc4d60a59c8d96.png) 问题2:以下程序的输出结果是多少? ![image.png](https://static.studygolang.com/190626/fb47c238dd22bfb165435f37441955e8.png) 结论:变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不复存在了 6:自动推导类型 --------------- 在给变量赋值时,我们感觉非常麻烦,有没有更简单的给变量赋值的方式,我们可以使用自动推导类型,具体示例如下: ![image.png](https://static.studygolang.com/190626/a2c508904e492fbecd4cb47626c4bb7a.png) 所谓自动推导类型,就是不用通过var 声明变量,不用指定类型,直接在变量名后面跟”:”号,同时完成赋值。那么GO会根据所赋的值自动推导出变量的类型。如果给num变量赋值为小数,那么该变量的类型为小数类型(浮点)。 通过比较,我们发现这种方式比前面的赋值方式要简单方便。这种方式,也是我们以后开发过程中最常用的方式。 7:多重赋值匿名变量 ------------------- (1)多重赋值 在上面的讲解中,我们给变量num赋值,采用了自动推导的方式,如果想一次使用自动推导的方式,给多个变量赋值,应该怎样实现呢?具体如下: ![image.png](https://static.studygolang.com/190626/a546697796c33bf4859e6e417501f4c9.png) 但是这种方式写起来非常的复杂,可以用如下的方式进行简化: ![image.png](https://static.studygolang.com/190626/6bb0e77e4db70e8cd4342bcb1c2c212c.png) 将1的值赋值给a,将10的值赋值给b,将30的值赋值给c. (2)匿名变量 \_匿名变量,丢弃数据不进行处理, \_匿名变量配合函数返回值使用才有价值,目前大家只需要知道其语法,后面学到函数时,我们在强调匿名变量的使用场景。 现在我们先看一下匿名变量的语法: ![image.png](https://static.studygolang.com/190626/365feaa4bc03dc319ea3e7974a283ad0.png) 8:数据置换 ----------- 到目前为止,我们已经学习了什么是变量,变量的定义,以及变量的赋值。那么下面大家思考如下问题: 有两个变量a和b, a的值为10,b的值为20,交换两个变量的值? (有两个杯子,都盛满了水,怎样交换两个杯子中的水) 1. 使用传统方式实现 ![image.png](https://static.studygolang.com/190626/2b499d52cd315b918d34a801d14e0537.png) 1. 使用多重赋值的方式实现 ![image.png](https://static.studygolang.com/190626/17a46444c41ae4cd251b7f6fc17b7ff9.png) > 多重赋值的方式交换两个变量的值,比通过第三个变量来进行变量交换更简单,代码也少。 9:输出格式 ----------- 关于“输出“大家也都能够理解是什么意思了,就是将数据信息打印在电脑屏幕上。生活中也随处可见输出的场景。 ![image.png](https://static.studygolang.com/190626/927131663ca4797132f0724576fa8ad8.png) 在我们GO语言中进行输出,用到我们前面所讲解的两个函数:Print()和Println() 这个两个函数的区别就是Print()函数不换行,Println()换行输出。 关于输出这里有两个问题,需要给大家强调清楚。 1. 我们前面的程序中,已经多次用到输出,不管是采用Print(),还是Println(),但是问题是,每次输出的数据结构不清晰,比较混乱。 > 例如如下程序: ![image.png](https://static.studygolang.com/190626/a546697796c33bf4859e6e417501f4c9.png) > 该程序输出的结果是 1,10,20 > .如果我们现在让另外一个程序员查看该结果,该程序员很难分清楚,1是来自哪个变量,2是来自哪个变量,3来自哪个变量,除非该程序员阅读代码。但是,大家想一下,如果该程序的代码量非常大,那么该程序员阅读代码是否要花费很长的时间呢?所以,建议采用如下输出: ![image.png](https://static.studygolang.com/190626/8ac11fe15c71605c36220d705ff6fa22.png) > 双引号内的内容会原样输出。这样结构比较清晰,注意与变量名之间用逗号分隔。 1. 除了使用Println()函数换行输出以外,还有另外一个函数Printf()也可以实现换行输出。示例如下: ![image.png](https://static.studygolang.com/190626/63ce4e95433c9add62342260a1862891.png) > 运行以后,发现确实换行了。这种输出方式,就是格式化输出,%d,表示输出的是一个整数,第一个%d会被变量a的值替换,第二个%d会被变量b替换,其它类型的输出用什么去表示后面会给大家讲解。 > “\\n” 表示换行。 > 有同学可能就问了,这种换行输出方式比较麻烦,但是如果一次性有结构的输出多个变量的值,Println()输出就会比较麻烦,并且结构也会感觉比较混乱,还是以上面的代码为例,如下: ![image.png](https://static.studygolang.com/190626/371a4ed2f676c32398d5487192bc30e7.png) 下面我们在给大家演示函数Printf()的输出: ![image.png](https://static.studygolang.com/190626/485f1874c4d97938970188cfab4e8a5c.png) > 通过对比发现Printf()函数一次性换行输出多个变量值,结构清晰。 10:接收输入 ------------ 前面我们所写的所有的程序,都是直接给变量赋值,但是很多情况下,我们希望用户通过键盘输入一个数值,存储到某个变量中,然后将该变量的值取出来,进行操作。我们日常生活中也经常用到输入的场景: 咱们在银行ATM机器前取钱时,肯定需要输入密码,对不? 那么怎样才能让程序知道咱们刚刚输入的是什么呢?? 大家应该知道了,如果要完成ATM机取钱这件事情,需要先从键盘中输入一个数据,然后用一个变量来保存,是不是很好理解啊! 那么我们GO语言怎样接收用户的键盘输入呢?如下: ![image.png](https://static.studygolang.com/190626/bbaba9a8a5e4704db21201b14b33e5a7.png) 在GO中我们用到了“fmt”这个包中的Scanf()函数来接收用户键盘输入的数据。当程序执行到Scanf()函数后,会停止往下执行,等待用户的输入,输入完成后程序继续往下执行。在这里重点要注意的是Scanf()函数的书写格式,首先也要用“%d”,来表示输入的是一个整数,输入完整数后存储到变量age中,注意这里age变量前面一定要加上“&”符号,表示获取内存单元的地址(前面我们说的内存存储区域的编号),然后才能够存储。 还有另外一种获取用户输入数据的方式,如下: ![image.png](https://static.studygolang.com/190626/fb2f3048a283b3e12a14741728a7c373.png) 通过Scan函数接收用户输入,这时可以省略掉%d,这种写法更简单。 11:变量命名规范 ---------------- 在我们前面的编程中,我们定义变量时都是随意进行命名,但是在GO语言中,对变量的命名有一些规范性的要求,下面我们看一下具体的要求。 1. 变量命名规范要求 > 名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。 > 除了上面提到的规范要求以外,GO语言自己特有的,具有一定含义的一些字符,也不能作为变量名称。例如,前面我们接触到的func, > fmt,print等等,这些都是GO自带的,具有特殊含义的字符,我们称为关键字。 ![image.png](https://static.studygolang.com/190626/e7a8dabd4d056f14c2f347f1d4b6a2b6.png) > 以上关键字都不能作为变量的名称。 > 此外,还有大约30多个预定义的名字,比如int和true等 ![image.png](https://static.studygolang.com/190626/4ed66af8df384e8dc0217a79215084e0.png) (2)下面的变量名称哪些正确? ![image.png](https://static.studygolang.com/190626/140010dc1079b696e85f863227d32545.png) (3)见名知意 起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可 读性) 比如: 名字 就定义为 name , 定义学生 用 student 1. 驼峰命名法 ![image.png](https://static.studygolang.com/190626/deb4a6052ed6bd93023946c78d62acde.png) 小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog 大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName 不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

624 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传