您好,欢迎来到站长目录(28sn.com)!


golang——为什么有的语言要把变量类型写在后面?

来源:网络整理 浏览:186次 时间:2021-09-15


今天是Golang的第三篇,我们一起来看看Golang当中的变量。

变量声明

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

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

var v1 intvar v2 int32 = 10v1 = 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 intvar 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 = 10var v3 = 10v4 := 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变量也通过驼峰命名法命名,并且首字母必须大写。

举例:

const HelloWorld = "hello world"

感谢Taosama大神的勘误。

推荐站点

  • 我爱发烧音乐我爱发烧音乐

    我爱发烧音乐囊括了从流行音乐到古典音乐多个类型的音乐作品,专栏推荐最新的音乐,提供音乐排名榜单!可供免费线上收听音乐,歌曲流畅,音效极佳! 网站提供的钢琴以及二胡专栏,可供收听者,陶冶情操,改善心情,是难得的轻音乐典藏!

    www.520fs.com
  • 世纪音乐网世纪音乐网

    世纪音乐网是专业的在线音乐试听MP3下载网站。歌曲总计30余万首,收录了网上最新歌曲和流行音乐,DJ舞曲,非主流音乐,经典老歌,劲舞团歌曲,搞笑歌曲,儿童歌曲,英文歌曲等。是您上网听歌的最佳网站。

    www.ssjj.com
  • 杭州网杭州网

      杭州网是杭州地区唯一的新闻门户网站,由中共杭州市委宣传部、杭州日报报业集团和杭州广播电视集团共同组建的杭州网络传媒有限公司运营。

    www.hangzhou.com.cn
  • 深圳在线深圳在线

      深圳在线 www.szol.net是深圳本地最大、最早的地方生活资讯网站之一,网站名“深圳在线www.szol.net”由南方报业传媒集团编辑委员会总编辑、南方日报社总编辑、南方都市报总编辑、南方书画院名誉院长王春芙亲笔题名,深圳在线www.szol.net团队与深圳热线www.szonline.net、奥一网www.oeeee.com都源于全国最早成立于1996年的知名网络公司——深圳万用网。

    www.szol.net
  • 今题网今题网

     今题网- 中国领先的社区服务网,提供社区服务, 在线交友和商家推广服务,于2004年创建上线,公司现有员工超过百名。今题网自成立以来,凭借其独特的定位和丰富的社区交友功能, 凭借其团队超强的搜索引擎优化技术吸引超过千万的用户成为今题网的注册会员。

    www.jinti.com

鄂公网安备 42062502000001号