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

我们给每个存储区域加上了Number1,Number2,Name等符号,这样通过这些符号来存储数据,然后通过这些符号取出数据就非常容易,方便了。这些符号就是变量。
2:变量声明和初始化
Go语言引入了关键字var,而类型信息放在变量名之后,示例如下:
package main
import "fmt"
func main() {
var a int = 10
var b,c string
var (
d byte
e bool = true
f []int
)
f = []int{0,1,2,3}
//声明变量(声明即未赋值) 均为零值
fmt.Println(a,b,c,d,e,f)
}
3:自动推导类型
在给变量赋值时,我们感觉非常麻烦,有没有更简单的给变量赋值的方式,我们可以使用自动推导类型,具体示例如下:
a:=10
fmt.println(a)
所谓自动推导类型,就是不用通过var 声明变量,不用指定类型,直接在变量名后面跟”:”号,同时完成赋值。那么GO会根据所赋的值自动推导出变量的类型。如果给num变量赋值为小数,那么该变量的类型为小数类型(浮点)。
通过比较,我们发现这种方式比前面的赋值方式要简单方便。
4:多重赋值
我们在给多个变量赋值的时候通过自动推导类型可以简化,如下:
func main() {
a:=1
b:=2
c:=3
fmt.Println(a,b,c)
}
但是这种方式写起来还是非常复杂,可以用如下方式进行简化:
func main() {
a,b,c:=1,2,3
fmt.Println(a,b,c)
}
5:匿名变量
丢弃数据不进行处理,匿名变量配合返回值使用。
package main
import "fmt"
func main() {
a:=6
_,fa:=test(a)
if fa{
fmt.Println("a大于5!")
}else{
fmt.Println("a小于5!")
}
}
func test(i int)(r int,f bool){
if i>5{
return i,true
}else{
return i,false
}
}
6:数据置换
简单的数据交换,如两个变量a=10,b=20,交换两个变量的值。
(1)传统方式
func main() {
a := 10
b := 20
var temp int
temp = a
a = b
b = temp
fmt.Println(a, b)
}
func main() {
a := 10
b := 20
a = a + b
b = a - b
a = a - b
fmt.Println(a, b)
}
(2)go多重赋值
func main() {
a := 10
b := 20
a, b = b, a
fmt.Println(a, b)
}
7:输出格式
1.Printlin()
func main() {
a := 10
b := 20
fmt.Println(a)
fmt.Println("b =",b)
}
输出结果为:
10
b = 20
2.Printf()
func main() {
a := 10
b := 20
fmt.Printf("a =%d\nb =%d", a, b)
}
输出结果为:
a =10
b =20
3.Print()
func main() {
a := 10
b := 20
fmt.Print(a,b)
fmt.Print("\n",a,"\n",b)
}
输出结果为:
10 20
10
20
8:接收输入
在GO中我们用到了“fmt”这个包中的Scanf()函数来接收用户键盘输入的数据。当程序执行到Scanf()函数后,会停止往下执行,等待用户的输入,输入完成后程序继续往下执行。在这里重点要注意的是Scanf()函数的书写格式,首先也要用“%d”,来表示输入的是一个整数,输入完整数后存储到变量age中,注意这里age变量前面一定要加上“&”符号,表示获取内存单元的地址(前面我们说的内存存储区域的编号),然后才能够存储。
通过Scan函数接收用户输入,这时可以省略掉%d,这种写法更简单。
func main() {
var age int
fmt.Println("请输入你的年龄:")
fmt.Scan(&age)
//fmt.Scanf("%d",&age)
fmt.Println("年龄是:",age)
}
9:变量命名规范
开头
名字必须以一个字母(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
驼峰命名
小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog
大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName
不过在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf