zoukankan      html  css  js  c++  java
  • 8.13Go之常量

    8.13Go之常量

    Go中常量的定义

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

    • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。--->基本类型

    常量的定义格式

    和变量不一样,只有两种声明格式:

    • :=符号会默认左侧声明的是一个变量

    • 常量的声明必须初始化赋值,可以使用不显示声明常量类型,由编译器自行判断。但是变量的值必须声明

    const VALUE = 1
    const VALUENO2 string = "Jun"

    常量声明的实例演示

    package main

    import "fmt"

    /*
    go语言之常量的练习
    1、关键字
    2、声明方法
    */
    const VALUE = 1
    const VALUENO2 string = "Jun"
    const (
    LENGTH int = 10
    WIDTH int = 5
    )

    var (
    area int
    )

    func main() {
    const a, b, c = 1,false,"Jun"
       const e,f,g int = 1,2,3
    fmt.Println(LENGTH,WIDTH,area,a,b,c)
    }
    常量和变量相同的点
    • 常量和变量一样也可以声明成全局常量

    • 和变量一样,常量也可以多赋值,并且可以根据实际的值来判断常量类型

    常量和变量不相同的点
    • go的常量赋值没有类似变量的这种形式:

      • const e,f,g int
        e,f,g = 1,2,3
        //这在golang中定义常量是不允许的,必须放在一行
        const e,f,g int = 1,2,3
        //这是允许的
    • go的局部常量可以不适用(方法中的常量),变量不行

    常量的计算表达式

    Go中使用内置函数去计算表达式的值:--->常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过

    package main

    import (
    "fmt"
    "unsafe"
    )

    /*
    go语言之常量的练习
    1、关键字
    2、声明方法
    */
    const VALUE = 1
    const VALUENO2 string = "Jun"
    const (
    LENGTH int = 10
    WIDTH int = 5
    A = "Lucifer"
    B = len(A)
    C = unsafe.Sizeof(A)
    )

    func main() {
    const a, b, c = 1,false,"Jun"
    const e,f,g int = 1,2,3
    fmt.Println(A,B,C)
    }
    //len()方法--->计算常量的长度
    //unsafe.Sizeof方法--->返回字符串长度+字符串起始地址指针
    /*
    Golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度!!!
    */

    特殊常量:iota

    特点:

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

    • iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

    声明形式:

    package main

    import (
    "fmt"
    )

    const (
    h = iota
    i
    j
    )

    func main() {
    fmt.Println(h,i,j)
    }

    第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2

    实例二:

    package main

    import "fmt"

    const (
    valueNo1 = iota //(adj 极小的)第一个iota=0
    valueNo2
    valueNo3
    valueNo4 = "Jun" //这是一个独立的值,但是iota还是在计数--->这里的iota += 1(实际在这里iota=3)
    valueNo5
    //这里如果不显式声明valueNo5的值,那么它将和valueNo4指向一个对象
        valueNo6 = 100
    valueNo7
    valueNo8 = iota
    valueNo9
    )

    func main() {
    fmt.Println(valueNo1,valueNo2,valueNo3,valueNo4,valueNo5,valueNo6,valueNo7,valueNo8,valueNo9)
    }

    分析:

    • iota从声明开始就一直计数

    • 常量中如果不显示给常量赋值那么它默认是前一个常量的值

      •     valueNo5
        //valueNo5因为没有显示的给他赋值所以它的值是valueNo4的"Jun"
        valueNo6 = 100
        //在valueNo6中重新给valueNo6显示赋值了所以valueNo7的值是valueNo6的值
        valueNo8 = iota
        //在使用iota赋值给valueNo8那么不会重新计数而是=从第一次声明iota开始到该位置的值
  • 相关阅读:
    数据类型
    注释
    编译型语言和解释型语言
    POJ1026 Cipher(置换的幂运算)
    最短路(代码来源于kuangbin和百度)
    POJ1753 Flip Game(bfs、枚举)
    POJ1860 Currency Exchange(bellman-ford)
    【转】博弈—SG函数
    【转】欧几里得与扩展欧几里得
    HDU 5833 Zhu and 772002(高斯消元)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15141437.html
Copyright © 2011-2022 走看看