go语言学习笔记(四)——变量声明和重声明 - Go语言中文社区

go语言学习笔记(四)——变量声明和重声明


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进行了“声明并赋值”,这时也是对后者的重声明

  • 问题:

如果与当前的变量重名的是外层代码块中的变量,那么意味着什么?

答:内部作用域的变量会覆盖外部作用域的变量,是声明一个新的变量而不是重声明,重声明只在同一个作用域生效。

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sinat_32023305/article/details/81904402
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:20:07
  • 阅读 ( 1365 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢