Go变量和常量

变量

由来

程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。

变量声明

  • 标准声明

    var 变量名 变量类型
    // 例:
    var age int
  • 批量声明

    var (
        a string
        b int
        c bool
        d float32
    )

变量初始化

Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil

  • 标准初始化

    var 变量名 类型 = 表达式
    // 例:
    var age int = 18
    var age, name = 18, "xiaoming"
  • 类型推导

    当将变量的类型省略时,编译器会根据等号右边的值来推导变量的类型完成初始化

    var age = 18
    var name = "xiaoming"
  • 函数内部声明并初始化

    在函数内部,可以使用更简略的 := 方式声明并初始化变量。

    package main
    
    import (
        "fmt"
    )
    
    func main(){
        a := 100
        fmt.Println(a)
    }
  • 匿名变量

    在使用多重赋值时,如果想要忽略某个值,可以使用下划线_,例如:

    package main
    
    import (
        "fmt"
    )
    
    func fn()(int, string){
        return 18, 'xiaoming'
    }
    
    func main(){
        age, _ := fn()
        fmt.Println(age)
    }

    匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。

tags:

  • 函数外的每个语句都必须以关键字开始(varconstfunc等)
  • :=不能使用在函数外。
  • _多用于占位,表示忽略值。

常量

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。

常量声明

  • 标准声明

    const pi = 3.14
  • 多个声明

    const (
        a = 1
        b = true
    )
  • 省略值处理

    当使用const声明多个值时,如果省略了值,则会与上一行的值相同,如果开始的未声明则报错

    const (
        a1 = 100  // a1未声明则会报错
        a2  // 100
        a3  // 100
    )

iota

iota是go语言的常量计数器,只能在常量的表达式中使用。

iotaconst关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。

  • 示例

    const (
        n1 iota  // 0
        n2  // 1
        n3  // 2
        n4  // 3
    )
  • 示例

    const (
        n1 iota  // 0
        n2  // 1
        _
        n4  // 3
    )
  • 示例

    const (
        n1 iota  // 0
        n2  =  11
        n3  // 2
    )
  • 示例

    const (
        _ = iota
        a_10 = 1<<iota
        a_100 = 1<<iota
        a_1000 = 1<<iota
    )
原文地址:https://www.cnblogs.com/jiaqi-666/p/11541027.html