今天是Golang的第三篇,咱们一块儿来看看Golang当中的变量。程序员

变量声明

Golang当中的变量类型和C/C++比较接近,通常用的比较多的也就是int,float和字符串。Golang当中不同的地方主要有几点,第一点是严格区分了int,int16,int32和int64,一样区分了float,float32和float64。golang

前文当中说过,Golang是不支持隐式转换的,哪怕是int和int32也同样。web

var v1 int
var v2 int32 = 10
v1 = v2
复制代码

上面的代码是会报错的,由于咱们用一个int类型的变量去接收了int32类型的。虽然Golang当中int通常也是32位的整数,可是这依然会被认为是两个不一样的类型。编辑器

第二点是Golang当中自带了map类型,像是java以及C++虽然也有map,可是都不是原生支持的,而是必需要经过引入包才可使用的。因此Golang的设计者就以为这很二,不必啊,既然全部程序员都要用到map,为何还非要引入包才能使用呢,直接嵌入在默认类型里好了。因而Golang的基本类型当中就有map。函数

另一点是Golang当中是有指针的,可是和C语言当中的指针不太同样,咱们先记住这一点,具体的内容咱们在后面介绍。学习

最后一点是Golang当中多了复数类型,也就是complex64和complex128,用来支持复数的运算。通常状况下咱们也不太用获得,因此暂时略过。spa

Golang的声明方法很简单,使用var关键字进行。和日常的语言不太同样的是Golang当中的变量类型写在变量名的后面,而不是前面。设计

好比:指针

var v1 int
var v2 float32
复制代码

刚开始的时候会以为有些不太适应,可是这样设计是有它的道理的。尤为在涉及指针的时候,把变量类型写在后面的方法能够增长可读性。好比咱们来看一个例子,在C语言当中支持指向函数的指针

double (*funcPtr)(double a, double b);
复制代码

这是一个指向函数的指针,若是咱们增长一下难度,好比咱们把这个函数指针做为参数传入其中也变成一个函数指针,整个定义写出来就会很是复杂:

double (*funcPtr)(double a, void(*funcPtr2)(int b, double c));
复制代码

这个可读性很是差,估计要看好久才能看懂,若是是忘了函数指针这茬,估计就完全看不懂了。

咱们再来看Golang的定义:

var v1 func(a float32, funcA func(b int, c double)) double
复制代码

相比之下,golang的定义要比C看起来可读性强不少。若是你看不太明白上面的例子也不要紧,咱们只须要记住这个结论便可。

初始化

Golang当中有三种初始化的方法,咱们直接来看代码:

var v2 int = 10
var v3 = 10
v4 := 10
复制代码

第一种方式最复杂,咱们不但写出了变量类型还写出了初始化以后的值。第二种精简许多,咱们只写了值,编译器会自动根据咱们写的值去匹配对应的类型。最后一种咱们连var和类型都不写了,可是须要加上冒号,和赋值操做作区分。

刚开始可能会有一些不太适应,尤为是Python选手,一贯无所谓类型的。可是写习惯了以后还能够,并无体验不好,并且写这种语法很严谨的语言有助于提高咱们的代码风格和严谨

惟一一点要注意的就是同一个变量不能被连续申明两次,下面两种写法都是错误的。

var s string = "hello"
var s string = "hello"

s := "hello"
s := "world"
复制代码

变量赋值

变量赋值其实没什么好说的,就是等于号赋值,直接左边等于右边便可。

若是只使用赋值的话,全部的变量必须已经通过初始化才能够。毕竟不是动态语言,不像Python不能随便定义。不过有一点须要注意,Golang当中很是务实地提供了多变量的赋值操做。好比咱们要交换两个变量的值,咱们能够用一行语句完成,再也不须要引入额外变量了。

a, b = b, a
复制代码

另外,Golang当中也支持匿名变量,也就是说对于咱们不须要的返回值,咱们能够不用额外定义一个变量去接收。不然没有用处,还会报错。

好比,假设咱们一个函数返回两个变量,可是咱们只须要用到其中的一个,咱们能够这样写:

ret, _ = sample()
复制代码

若是这里的变量以前没有定义过,咱们还能够这么写:

ret, _ := sample()
复制代码

直接用函数返回值来声明并赋值变量。

关于变量这一块Golang和C++等语言变化不大,若是有C++基础的话,学习起来应该很是快速。而且相比于C++繁多的语法和众多的应用方法,Golang的学习曲线要平缓不少,入门也更简单。我相信对大家来讲必定都不是问题。

勘误

最后作一个小小的勘误,因为我学习资料过于陈旧,致使上周关于golang中常量定义的阐述发生了错误,在此进行勘误。在最新的golang版本当中,规定const变量也经过驼峰命名法命名,而且首字母必须大写。

这里感谢Taosama大神的勘误。

const HelloWorld = "hello world"
复制代码

今天的文章就是这些,若是以为有所收获,请顺手点个关注或者转发吧,大家的举手之劳对我来讲很重要。