内容简介:今天是Golang当中的前文当中说过,Golang是不支持隐式转换的,哪怕是int和int32也一样。
今天是 Golang的第三篇 ,我们一起来看看Golang当中的变量。
变量声明
Golang当中的 变量类型和C/C++比较接近 ,一般用的比较多的也就是int,float和字符串。Golang当中不一样的地方主要有几点,第一点是严格区分了int,int16,int32和int64,同样区分了float,float32和float64。
前文当中说过,Golang是不支持隐式转换的,哪怕是int和int32也一样。
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,用来支持复数的运算。一般情况下我们也不太用得到,所以暂时略过。
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" 复制代码
今天的文章就是这些,如果觉得有所收获,请顺手点个 关注或者转发 吧,你们的举手之劳对我来说很重要。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 02-GoLang定义变量
- go变量定义
- gradle使用技巧(def定义变量 rootProject.ext 添加全局变量)
- 在CoffeeScript中定义私有成员变量
- 在CoffeeScript中定义私有成员变量
- 在CoffeeScript中定义私有成员变量
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cascading Style Sheets 2.0 Programmer's Reference
Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99
The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!