社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
Go语言中的程序实体包括变量,常量,函数,结构体和接口。Go语言是静态类型的编程语言,所以我们在声明变量或常量的时候都需要指定它们的类型,或者给予足够的信息以使Go语言能够推导出他们的类型。
1.声明变量且声明变量类型
先看如下代码
如上var name string是基本的变量声明语法
2.不声明变量类型,直接=赋值
var name = *flag.String("name", "Default Name", "Param description")
这时声明中并没有显式的指定name的类型,这里利用了Go语言自身的类型推断而省去了string。类型推断是一种编程语言在编译期自动解释表达式类型的能力,表达式类型就是对表达式进行求值后得到结果的类型,它只能用于对变量或常量的初始化
3.不声明变量类型,使用短变量声明
name := *flag.String("name", "Default Name", "Param description")
这种写法实际上就是Go语言的类型推断再加上一点点语法糖。我们只能再函数体内部使用短变量声明,在编写if,for,switch语句的时候,我们经常把它安插在初始化子句中,并用来声明一些临时的变量,相比之下,第二种方式更加通用,他可以被用在任何地方。
通过使用短变量声明,我们可以对同一代码块中的变量进行重声明
注:Go代码块一般是指一个由花括号括起来的区域,里面包含了表达式和语句。Go语言本身以及我们编写的代码共同形成了一个非常大的全域代码块。
主要体现在:
1、公开的全局变量,可以被任何代码引用;
2、一个代码包可以包含许多子代码包,所以,代码包既可以是小的代码块,也可以是很大的代码块。
3、每个源码文件也是一个代码块,每个函数、if语句、for语句、switch语句和select语句,都是代码块。
4、单独一个花括号,也算一个代码块,称作“空代码块”(极端举例:main函数就算一个空代码块)
变量重声明的前提条件如下
1、再次声明时赋予的变量类型必须与其原类型相同,否则会产生编译错误。
2、变量的重声明只能发生在某一个代码块中。
3、变量的重声明只有在使用短变量声明时才会发生,否则无法通过编译。
4、被“声明并赋值”的变量必须是多个,并且其中至少有一个是新的变量。
通过上述前提可以看出,变量重声明其实是一个语法糖。它允许我们在使用短变量声明时,不用理会被赋值的多个变量中是否包含旧变量,代码示例 demo9.go:
package main
import (
"fmt"
"io"
"os"
)
func main() {
var err error
n, err := io.WriteString(os.Stdout, "Hello, everyone!n") // 使用短变量声明对新变量n(必须首次赋值)和旧变量err进行声明并赋值。
if err != nil {
fmt.Printf("Error: %vn", err)
}
fmt.Printf("%d byte(s) were written.n", n)
}
使用短变量声明对新变量n和旧变量err进行了“声明并赋值”,这时也是对后者的重声明
如果与当前的变量重名的是外层代码块中的变量,那么意味着什么?
答:内部作用域的变量会覆盖外部作用域的变量,是声明一个新的变量而不是重声明,重声明只在同一个作用域生效。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!