go语言基础语法01天-2

1,注释

1.1 注释作用

在前面我们已经写过第一个GO程序了,该程序的功能很简单,代码量不是很多,也就是几行代码。但是大家看下面这段代码,代码量比我们写的第一个程序代码量多了很多,代码多了以后,阅读起来非常不容易

 

接下来,在看下面的代码,由于在一些代码行上有汉字,所以阅读起来就很方便。

 

我们通过用自己熟悉的语言(例如,汉语),在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。以后,在公司中做开发,其他程序员会经常阅读我们写的代码,当然,我们也会经常阅读别的程序员写的代码,如果代码中加了注释,那么阅读起来就非常容易了。

1.2 注释分类

1.2.1 单行注释

所谓单行注释,就是每次给一行代码加注释,你可以在任何地方使用以 // 开头的单行注释。 

1.2.2 多行注释

如果代码量比较多,每行加注释,比较麻烦,可以使用多行注释。

 

除了给代码加上说明,用注释以外,如果你写的代码不想让计算机执行,那么也可以加上注释。 加了注释后代码不会被编译执行,这就是对已有的代码进行注销。

1.2.3 重点强调

以后写程序要多加注释,这是我们程序猿的专业和职业道德,不加注释就是流氓。

2,变量

2.1 什么叫变量

在前面的讲解案例中,我们是让计算机输出数据到屏幕上,那么有同学可能就要问了,怎样让计算机保存我们通过键盘输入的数据呢?这就要用到变量了。

所谓的变量简单的理解就是计算机用来存储数据的。我们可以理解变量就像我们去超市买商品时用到的购物车,我们先将商品从货架上拿下来,放到购物车中,结账时在从购物车中取出商品。计算机通过变量来保存数据,实际上将数据存储到计算机的内存中,如下图所示:

 

计算机将内存划分成不同的区域,数据就是存储在这些区域中,那么怎样从这些区域中将数据取出来呢?计算机将每块区域都加上了一串数字,作为编号。通过该编号就可以将数据取出来了,但是问题是,这一串数字对我们程序员来说是非常难记忆的, 为了解决这个问题,我们可以通过变量的方式来表示存储的数据,如下图:

 

我们给每个存储区域加上了Number1,Number2,Name等符号,这样通过这些符号来存储数据,然后通过这些符号取出数据就非常容易,方便了。这些符号就是变量。

2.2 变量类型

我们现在理解了变量可以用来存储数据,但是我们要存储的数据类型是各种各样的,例如:整数,小数,文本等等。所以我们必须在定义变量时就要告诉计算机,定义的变量存储是什么类型的数据。那么在内存中就可以根据不同的类型来开辟不同的存储空间。

生活中关于“类型“的例子:

 

关于GO语言中的有哪些类型,我们后面会具体讲解。下面我们先看一下怎样声明变量?

2.3 变量声明

所谓声明变量就是创建一个变量,并且指定该变量存储什么类型的数据。

Go语言引入了关键字var,而类型信息放在变量名之后,示例如下:

package main

import "fmt"

func main(){
	fmt.Println("测试变量定义")
	//1、声明格式: var 变量名 类型,变量声明了,必须要使用
	//2、声明整数变量,该变量默认值为0
	//3、同一个{}里,声明的变量名是唯一的
	var a int
	fmt.Println("a = ",a)
	//4、可以同时声明多个变量,中间用逗号隔开
	//var b,c int
}

注意:这里的输出是先将变量a的值取出来,然后在打印在屏幕上。所以不能给a这个变量加上引号。

2.4 变量初始化

现在我们虽然已经完成变量的定义了,但是该变量中存储的值,并不是我们想要的,我们希望变量中存储的是我们想要的值,应该怎么办?

我们可以在定义变量时,就给变量赋值,这种方式就是变量的初始化。示例如下:

var b int = 10
fmt.Println("b = ",b)

或者直接输出值:
fmt.Println(b)

注意:在这里我们将”=”符号,读作“赋值号”,不能读作“等号”。

  • 问题1:以下的程序输出的结果是多少?
var c int = 20
fmt Println("c")

同时再次强调一下在这里输出变量c的值,所以不能给变量c加上双引号。如果加""代表输出的是普通字符串

2.5 变量赋值

除了在定义变量时,完成初始化以外,我们也可以在变量定义完后,再给变量赋值,也就是先声明后赋值,示例如下:

var b,c int //定义完变量b,c后,再对其赋值
b = 10
c = 20
fmt.Println(b) //输出2个变量的值
fmt.Println(c)

注意:上面的输出语句也可以只使用一个Println函数,具体如下:fmt.Println(a,b),中间用逗号进行分割

  • 问题1:以下程序的输出结果是多少?
var a int = 10
var b int = 20
b = a 
fmt.Println(b)

b = a ,就是把a的值赋给b,b的声明值被覆盖掉了,所以结果为10

结论:变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不复存在了

2.6 自动推导类型

在给变量赋值时,我们感觉非常麻烦,有没有更简单的给变量赋值的方式,我们可以使用自动推导类型,具体示例如下:

num := 30
fmt.Println(num)

所谓自动推导类型,就是不用通过var 声明变量,不用指定类型,直接在变量名后面跟":"号,同时完成赋值。那么GO会根据所赋的值自动推导出变量的类型。如果给num变量赋值为小数,那么该变量的类型为小数类型(浮点)。

通过比较,我们发现这种方式比前面的赋值方式要简单方便。这种方式,也是我们以后开发过程中最常用的方式。

2.7 多重赋值匿名变量

2.7.1 多重赋值

在上面的讲解中,我们给变量num赋值,采用了自动推导的方式,如果想一次使用自动推导的方式,给多个变量赋值,应该怎样实现呢?具体如下:

package main

import "fmt"

func main(){
    a := 5
	b := 10
	c := 20
	fmt.Println(a,b,c)
}

但是这种方式写起来非常的复杂,可以用如下的方式进行简化:

package main

import "fmt"

func main(){
    a,b,c := 1,10,20
	fmt.Println(a,b,c)
}

将1的值赋值给a,将10的值赋值给b,将30的值赋值给c.

2.7.2 匿名变量

_匿名变量,丢弃数据不进行处理, _匿名变量配合函数返回值使用才有价值,目前大家只需要知道其语法,后面学到函数时,我们在强调匿名变量的使用场景。

_,i,_,j := 1,2,3,4

2.8 数据置换

到目前为止,我们已经学习了什么是变量,变量的定义,以及变量的赋值。那么下面大家思考如下问题: 有两个变量a和b, a的值为10,b的值为20,交换两个变量的值?

2.8.1 使用传统实现

package main

import "fmt"

func main(){
    var a int = 10
    var b int = 20
    var temp int
    temp = a
    a = b
    b = temp

    fmt.Print(a,b)
}

2.8.2 使用多重赋值的方式实现

package main

import "fmt"

func main(){
    a,b := 10,20
    a,b = b,a
    fmt.Println(a,b)
}

多重赋值的方式交换两个变量的值,比通过第三个变量来进行变量交换更简单,代码也少。

2.9 输出格式

关于“输出“大家也都能够理解是什么意思了,就是将数据信息打印在电脑屏幕上。生活中也随处可见输出的场景。 

在我们GO语言中进行输出,用到我们前面所讲解的两个函数:Print()和Println() 这个两个函数的区别就是Print()函数不换行,Println()换行输出。

关于输出这里有两个问题,需要给大家强调清楚。

2.9.1

我们前面的程序中,已经多次用到输出,不管是采用Print(),还是Println(),但是问题是,每次输出的数据结构不清晰,比较混乱。

例如如下程序:

package main

import "fmt"

func main(){
    a := 1
    b := 10
    c := 20
    fmt.Println(a,b,c)
}

输出如下:

1 10 20

该程序输出的结果是 1,10,20 .如果我们现在让另外一个程序员查看该结果,该程序员很难分清楚,1是来自哪个变量,10是来自哪个变量,20来自哪个变量,除非该程序员阅读代码。

2.9.2

但是,大家想一下,如果该程序的代码量非常大,那么该程序员阅读代码是否要花费很长的时间呢?所以,建议采用如下输出:

package main

import "fmt"

func main(){
    a := 1
    b := 10
    c := 20
    fmt.Println("a=",a)
    fmt.Println("b=",b)
    fmt.Println("c=",c)
}

输出如下:

a= 1
b= 10
c= 20

双引号内的内容会原样输出。这样结构比较清晰,注意与变量名之间用逗号分隔。

2.9.3

除了使用Println()函数换行输出以外,还有另外一个函数Printf()也可以实现换行输出。示例如下:

ackage main

import "fmt"

func main(){
    a := 1
    b := 10
    c := 20
    fmt.Printf("a=%d\n b=%d\n c=%d",a,b,c)

}

运行以后,发现确实换行了。这种输出方式,就是格式化输出,%d,表示输出的是一个整数,第一个%d会被变量a的值替换,第二个%d会被变量b替换,其它类型的输出用什么去表示后面会给大家讲解。 “\n” 表示换行。

有人可能就问了,这种换行输出方式比较麻烦,但是如果一次性有结构的输出多个变量的值,Println()输出就会比较麻烦,并且结构也会感觉比较混乱,还是以上面的代码为例,如下:

package main

import "fmt"

func main(){
    a := 1
    b := 10
    c := 20
    fmt.Println("a=",a,"b=",b,"c=",c)

}

输出如下:

a= 1 b= 10 c= 20

下面演示函数Printf()的输出:


package main

import "fmt"

func main(){
    a := 1
    b := 10
    c := 20
    fmt.Printf("a=%d,b=%d,c=%d\n",a,b,c)

}

输出如下:

a=1,b=10,c=20

2.10 接收输入

前面我们所写的所有的程序,都是直接给变量赋值,但是很多情况下,我们希望用户通过键盘输入一个数值,存储到某个变量中,然后将该变量的值取出来,进行操作。我们日常生活中也经常用到输入的场景:

 

咱们在银行ATM机器前取钱时,肯定需要输入密码,对不? 那么怎样才能让程序知道咱们刚刚输入的是什么呢?? 大家应该知道了,如果要完成ATM机取钱这件事情,需要先从键盘中输入一个数据,然后用一个变量来保存,是不是很好理解啊!

那么我们GO语言怎样接收用户的键盘输入呢?如下:

package main

import "fmt"

func main(){
    var age int
    fmt.Println("请输入你的年龄")
    fmt.Scanf("%d",&age)
    fmt.Println("age=",age)
}

在GO中我们用到了“fmt”这个包中的Scanf()函数来接收用户键盘输入的数据。当程序执行到Scanf()函数后,会停止往下执行,等待用户的输入,输入完成后程序继续往下执行。在这里重点要注意的是Scanf()函数的书写格式,首先也要用“%d”,来表示输入的是一个整数,输入完整数后存储到变量age中,注意这里age变量前面一定要加上“&”符号,表示获取内存单元的地址(前面我们说的内存存储区域的编号),然后才能够存储。

还有另外一种获取用户输入数据的方式,如下:

package main

import "fmt"

func main(){
    var age int
    fmt.Println("请输入你的年龄")
    fmt.Scan(&age)
    fmt.Printf("age=%d",age)
}

通过Scan函数接收用户输入,这时可以省略掉%d,这种写法更简单。

2.11 变量命名规范

在我们前面的编程中,我们定义变量时都是随意进行命名,但是在GO语言中,对变量的命名有一些规范性的要求,下面我们看一下具体的要求。

2.11.1 变量命名规范要求

名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。

除了上面提到的规范要求以外,GO语言自己特有的,具有一定含义的一些字符,也不能作为变量名称。例如,前面我们接触到的func, fmt,print等等,这些都是GO自带的,具有特殊含义的字符,我们称为关键字。

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

以上关键字都不能作为变量的名称。

此外,还有大约30多个预定义的名字,比如int和true等

true false iota nil

    	int int8 int16 int32 int64
    	uint uint8 uint16 uint32 uint64 uintptr
    	float32 float64 complex128 complex64
    	bool byte rune string error

    	make len cap new append copy close delete
    	complexrealimag
    	panic recover

2.11.2 下面变量哪些正确

 

2.11.3 见名知意

起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可 读性) 比如: 名字 就定义为 name , 定义学生 用 student

驼峰命名法

 

  • 小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
  • 大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
  • 不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值