美文网首页
GO语言基础学习——变量

GO语言基础学习——变量

作者: Amy1234567 | 来源:发表于2023-10-17 10:13 被阅读0次

    变量

    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. 形式参数

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

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

    相关文章

      网友评论

          本文标题:GO语言基础学习——变量

          本文链接:https://www.haomeiwen.com/subject/cpxnbdtx.html