简介
Go语言中的程序实体包括变量、常量、函数、结构体和接口。GO语言是静态类型的编程语言,所以在声明变量或 常量的时候,都需要指定它们的类型,或者给予足够的信息,才可以让Go语言能够推导出它们的类型。
在Go语言中,变量的类型可以是其预定义的那些类型,也可以是程序自定义的函数、结构体或接口。常量的合法类型不多,只能是那些Go语言预定义的基本类型。
flag.String函数返回的结果值的类型是*string 而不是string,在声明了变量name的同时,还为它赋了值,而这时并没有显示指定name的类型。这里利用了Go语言自身的类型推断,而省去了对该变量的类型的声明。类型推断是一种编程语言在编译期自动解释表达式类型的能力。
短变量声明的用法
go语言的类型推断的好处
1.代码重构
var name=右边的表达式,针对getTheFlag函数的调用表达式了。实际上是对“声明并赋值name变量的那行代码”的重构。我们通常把不改变某个程序与外界的任何交互方式和规则,而只改变其内部实现”的代码修改方式,叫做对该程序的重构。重构的对象可以是一行代码、一个函数、一个功能模块,甚至一个软件系统。
在你改变getTheFlag函数的结果类型之后,Go 语言的编译器会在你再次构建该程序的时候,自动地更新变量name的类型。
通过这种类型推断,你可以体验到动态类型编程语言所带来的一部分优势,即程序灵活性的明显提升。但在那些编程语言中,这种提升可以说是用程序的可维护性和运行效率换来的。
Go语言是静态类型的,所以一旦在初始化变量时确定了他的类型,之后就不可能再改变,避免了在后面维护程序时的一些问题。这种类型的确定是在编译其完成的,因此不会对程序的运行效率产生任何影响。
Go 语言的类型推断可以明显提升程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护带来额外负担(实际上,它恰恰可以避免散弹式的代码修改),更不会损失程序的运行效率。
2.变量的重声明
短变量声明,通过使用它,可以对同一个代码块中的变量进行重声明。
代码块:
1.代码块一般就是一个由花括号括起来的区域,里面可以包含表达式和语句。
2.Go语言本身以及我们编写的代码形成的代码块叫全域代码块
3.相对小一些的代码块是代码包,一个代码包可以包含许多字代码包
4.每一个源文件都是一个代码块,每一个函数也是一个diamond块,每一个语句,for语句,switch语句和select语句都是一个代码块,甚至switch或select语句中的case子句也都是独立的代码块。main函数中写一对紧挨着的花括号也是一个代码块,叫“空代码块”
重声明:对已经声明过的变量再次声明。
变量重声明的前提条件:
1.由于变量的类型在其初始化时已经确定了,所以对它再次声明时赋予的类型必须与其原本的类型相同,否则会产生编译错误
2.变量的重声明只可能发生在某一个代码块中。
3.变量的重声明只有在使用短变量声明时才会发生,否则也无法通过编译。如果要在此处声明全新的变量,那么就应该使用包含关键字var的声明语句,但是这时就不能与同一个代码块中的任何变量有重名了。
4.被“声明并赋值”的变量必须是多个,并且其中至少有一个是新的变量。这时我们才可以说对其中的旧变量进行了重声明
使用短变量声明对新变量n和就变量err进行了“声明并赋值”,也是对后者的声明