zoukankan      html  css  js  c++  java
  • Golang变量&常量 标识符&关键字

    变量与常量

    变量(Variable)

    变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)。

    方法 1
        var a int       //声明          声明后若不赋值,使用默认值
        a = 10          //赋值
        fmt.Println(a)  //使用
    
    方法 2
        var a = 10      //声明并赋值    根据值自行判定数据类型(类型推导)
        fmt.Println(a)  //使用  
    
    方法 3
        a := 10         //声明并赋值    “:=” 方式赋值时,必须是一个没有声明过的变量,否则会导致编译错误 no new variables on left side of :=
        fmt.Println(a)  //使用
    

    golang 提供多变量声明与赋值

    //一次性声明多个全局变量[在go中函数外部定义变量就是全局变量]
    方式一:
        var a = 1
        var b = 2
        fmt.Println(a, b) 
     
    方式二:
        var (
            a    = 1
            b    = 2
        )
        fmt.Println(a, b) 
    
    方式三:
        var a, b = 1, 2
    	fmt.Println(a, b)
    
    方法四:
        a, b := 1, 2
    	fmt.Println(a, b)
    

    匿名变量(anonymous variable)

    在使用多重赋值时,如果不需要在左值中接收变量,可以使用匿名变量
    匿名变量的表现是一个下画线_,使用匿名变量时,只需要在变量声明的地方使用下画线替换即可。
    匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。

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

        func GetData() (int, int) {
            return 100, 200
        }
        a, _ := GetData()
        _, b := GetData()
        fmt.Println(a, b)
    

    常量(constant)

    golang中,常量是指编译期间运算得出且不可改变的值。
    golang常量定义的关键字为const。
    常量中的数据类型只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。

        // 定义单个常量
        const Pi float64 = 3.14159265358979323846
    
        // 定义多个常量
        const (
            Size int64 = 1024
            Eof  int64 = -1
        )
    

    golang常量定义可以限定常量类型,也可以不限定。如果常量定义时没有限定类型,那么它与字面常量一样,是一个无类型常量。

        // 定义单个常量
        const Pi = 3.14159265358979323846 // 无类型浮点常量
    
        // 定义多个常量
        const (
            Size = 1024 // 无类型整型常量
            Eof  = -1   // 无类型整型常量
        )
    

    无论是变量还是常量,不同类型的都不能显式的声明在一行:

        var a int, b float32 = 1, 2.4   //编译器不通过
        const c int, d float32 = 3, 4.4 //编译器不通过
        const c, d float32 = 3, 4 //编译通过(此时c和d都是float32类型)
        const c, d = 3, 4.4  //编译通过(此时c是int类型,d是float64类型)
    

    当我们定义常量时,如果多个常量的值相同,后面的常量可以直接不赋值,默认等同于上面已赋值的常量的值

    package main
    
    import "fmt"
    const (
        a = "itbsl"
        c
        d
    )
    func main() {
        fmt.Println(a, c, d)
    }
    

    结果

    itbsl itbsl itbsl
    

    我们可以通过reflect.Typeof(变量名)打印变量或常量的类型

    常量可以用len()、cap()、unsafe.Sizeof()常量计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不通过,因为在编译期间自定义函数均属于未知,因此无法用于常量的赋值

    golang常量定义的右值可以是一个在编译期运算的常量表达式,这与c语言中宏的性质是一样的。

        const Mask = 1 << 3            // correct
        const Path = os.Getenv("PATH") // incorrect : const initializer os.Getenv("PATH") is not a constant
    

    字面常量(literal)

    字面常量(literal),是指程序中硬编码的常量。
    golang中字面常量是无类型的,只要该字面常量在相应类型的值域范围内,就可作为该类型的常量。

    预定义常量

    golang预定义了这些常量:true、false和iota

    • true和false

    预定义常量true和false所属的基础类型为bool

    • iota

    预定义常量iota所属的基础类型为int
    iota可认为是一个可被编译器修改的常量:在每一个const关键字出现时值重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1
    如果两个const赋值语句的表达式一样,那么可以省略后一个赋值表达式

    枚举

    golang并不支持众多其他语言中支持的enum关键字。
    在golang中定义枚举值的方式:在const后跟一对圆括号的方式定义一组常量。

    标识符与关键字

    标识符

    Golang对各种变量、方法、函数等命名时使用的字符序列成为标识符

    Go中函数、变量、常量、类型、语句标签和包的名称遵循一个简单的规则:名称的开头是一个字母(Unicode中的字符即可)或下划线,后面可以跟任意数量的字符数字下划线,并区分大小写

    如果一个实体在函数中声名,她只在函数局部有效。如果在函数外声明,它将对包里面的所有源文件可见。实体第一个字母的大小写决定其可见性是否跨包。如果名称以大写字母开头,它是导出的,意味着它对包外是可见和可访问的,可以被自己包之外的其他程序所引用,像fmt包中的Printf。包名总是由小写字母组成。

    包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短、有意义,不要和标准库冲突
    变量名,函数名,常量名:尽量使用驼峰法
    首字母大写可被其他包访问(类似Public),首字母小写只能在本包内使用(类似Private)

    关键字

    Go有25个关键字,只能用在语法允许的地方,他们不能作为变量名称:

    break            default            func            interface
    select           case               defer           go
    map              struct             chan            else
    goto             package            switch          const
    fallthrough      if                 range           type
    continue         for                import          return
    var
    

    预定义标识符

    另外,还有36个内置的预声明的常量、类型和函数:(还有一种说法叫做预定义标识符)

    • 常量:
    true            false            iota            nil
    
    • 类型:
    int        int8        int16        int32        int64
    uint       uint8       uint16       uint32       uint64      uintptr
    float32    float64     complex64    complex128
    bool       byte        rune         string       error
    
    • 函数:
    make            len            cap            new            append           copy       
    close           delete         complex        real           imag             panic        
    recover
    
  • 相关阅读:
    debug和console.write()有什么区别
    数据源绑定DataGridViewComboBox
    关于SqlDataAdapter的Update()方法
    反思。。
    C语言光标移动
    关于湖南工业大学“蓝桥杯”预选赛
    Left digit
    突然想写个超级马里奥
    如何知道一个数有多大位数
    Hut 新生训练赛第二场 迟来的解题报告
  • 原文地址:https://www.cnblogs.com/KylinBlog/p/13607232.html
Copyright © 2011-2022 走看看