• Go语言常量


    常量是一个简单值的标识符,在程序运行时,不会被修改的量。

    常量中的数据类型只能是布尔型、数字型(整数型、浮点型和复数)和字符串型

    常量的定义格式:

    //const 常量名     类型      值
    const identifier [type] = value
    

    可以省略类型说明符[type],因为编译器可以根据变量值来推断其类型。

    • 显式类型定义: const b string = "itbsl"
    • 隐式类型定义: const b = "itbsl"

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

    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类型)
    

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

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

    package main
    
    import "unsafe"
    
    const (
        a = "cstxco"
        b = len(a)
        c = unsafe.Sizeof(a)
    )
    func main() {
        println(a, b, c)
    }
    

    iota

    iota,特殊常量,可以认为是一个可以被编译器修改的常量。

    在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。iota可以被用作枚举值:

    const(
        a = iota
        b = iota
        c = iota
    )
    

    第一iota等于0,每当iota在新的一行被使用时,它的值都会自动加1;所以a=0,b=1,c=2,可以简写为如下形式:

    const(
    	a = iota
        b
        c
    )
    

    用法示例:

    package main
    
    import "fmt"
    
    func main() {
        const(
            a = iota     //0
            b            //1
            c            //2
            d = "itbsl" //独立值,iota += 1
            e            //itbsl iota += 1
            f = 200      //200  iota += 1
            g            //200 iota += 1
            h = iota     //7,恢复计数
            i            //8
        )
    
        fmt.Println(a, b, c, d, e, f, g, h, i)
    }
    

    输出结果为

    0 1 2 itbsl itbsl 200 200 7 8
    

    我们可以把iota理解为const里的行数

    const(
        a = iota
        b = iota
        c, d = iota, iota
    )
    fmt.Println(a, b, c, d)
    

    输出结果为

    0 1 2 2
    

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

    package main
    
    import "fmt"
    //当我们定义常量时,如果多个常量的值相同,后面的常量可以直接不赋值,默认等同于上面已赋值的常量的值
    const (
        a = "itbsl"
        c
        d
    )
    func main() {
        fmt.Println(a, c, d)
    }
    

    输出结果为

    itbsl itbsl itbsl
    
  • 相关阅读:
    [LintCode] Flatten Nested List Iterator 压平嵌套链表迭代器
    [LintCode] Reverse Pairs 翻转对
    [CareerCup] 17.9 Word Frequency in a Book 书中单词频率
    [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
    [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字
    [LeetCode] Reverse Vowels of a String 翻转字符串中的元音字母
    [CareerCup] 17.6 Sort Array 排列数组
    [LeetCode] 344. Reverse String 翻转字符串
    [CareerCup] 17.5 Game of Master Mind 猜字游戏
    [CareerCup] 17.4 Maximum of Two Numbers 两数中的较大值
  • 原文地址:https://www.cnblogs.com/itbsl/p/9855140.html
Copyright © 2020-2023  润新知