GO语言基础学习——变量

2023-10-17  本文已影响0人  Amy1234567

变量

1. 标准格式

(1). Go语言的变量声明的标准格式为:var 变量名 变量类型

变量声明以关键字var开头,后置变量类型,行尾无须分号。

(2). 批量格式

使用关键字var和括号,可以将一组变量定义放在一起。

var (

    a int

    b string

    c []float

    d func() bool

    e struct { x int }

)

2. 简短格式

除var关键字外,还可使用更加简短的变量定义和初始化语法。

名字:=表达式

需要注意的是,简短模式(short variable declaration)有以下限制:

(1). 定义变量,同时显示初始化

(2). 不能提供数据类型

(3). 只能用在函数内部

和var形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:

i,j := 0,1

下面通过一段代码来演示简短格式变量声明的基本样式:

func main(){ 

    x := 100 

    a,x := 1,"100"

}

因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。var形式的声明语句往往是用于显示指定变量类型的地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方。

3. 初始化类型的默认值

GO语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化起类型的默认值。例如:

\bullet  整型和浮点型的默认值为0和0.0

\bullet  字符串变量的默认值为空字符串

\bullet  布尔值默认为bool

\bullet  切片,函数,指针变量的默认为nil

变量初始化的标准格式:var 变量名 类型 = 表达式

例如:var hp int = 100

4. 编译器推导类型的格式

在标准格式的基础上,将int省略后,编译器会尝试根据等号右边的表达式推到hp变量的类型。

var hp = 100

等号右边的部分在编译原理里被称为右值(rvalue)

5. 短变量声明并初始化

var的变量声明还有一种更为精简的写法,例如:

hp := 100

这是Go语言推导声明写法,编译器会自动根据右值类型判断出左值的对应类型。

注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。

短变量声明并初始化格式在开发中使用比较普遍。

conn,err = net.Dial("tcp", "127.0.0.1:8080")

注意:在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即使其他变量名可能是重复声明的,编译器也不会报错。

conn, err = net.Dial("tcp", "127.0.0.1:8080")

conn2, err = net.Dial("tcp", "127.0.0.1:8080")

上面代码片段,编译器不会报err重复定义。

6. 变量交换

var a int = 100

var b int = 200

b,a = a,b

fmt.Println(a, b)

7. 匿名变量

在编码过程中,可能会遇到没有名称的变量,类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代码的灵活性,这些变量被统称为匿名变量。

匿名变量的特点是一个下画线“_”,“_”本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。使用匿名变量时,只需要在变量声明的地方使用下画线替换即可。

匿名变量不占用内存空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。

提示:在 Lua 等编程语言里,匿名变量也被叫做哑元变量。

Go语言变量的作用域

Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译报错。

根据变量定义的位置不同,可以分为三个类型:

\bullet  函数内定义的变量称为局部变量

\bullet  函数外定义的变量称为全局变量

\bullet  函数定义中的变量称为形式参数

1. 局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。

局部变量不是一直存在的,它只定义在它的函数被调用后存在,函数调用结束欧这个局部变量就会被销毁。

2. 全局变量

在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用"import"关键字引入全局变量所在的源文件后才能使用这个全局变量。

全局变量声明必须以var关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。

Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。

3. 形式参数

在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的行参并不占用实际的存储单元,也没有实际值。

形式参数会作为函数的局部变量来使用。

上一篇 下一篇

猜你喜欢

热点阅读