zoukankan      html  css  js  c++  java
  • <3>Golang基础进阶——常量和枚举

    Golang:常量和枚举

    常量—恒定不变的量

    相对于变量,常量是恒定不变的值,例如圆周率。

    常量表示:

    const pi = 3.1415
    const e = 2.7123

    常量 明和变量声明非常 似,只是把  var  换成了  const 

    多常量声明:

    const (
    pi = 3.1415
    e = 2.7123
    )

    常量在编译期确定,所以可以用于数组声明:

    const size = 4
    var arr [size]int

    枚举—一组常量值

    一般情况下一组常量附带空变量

    func enum2() {
    const (
    python = 0
    java
    golang = 1
    php
    )
    fmt.Println(python, java, golang, php)
    }

    func main() {
    enum2()
    // 0 0 1 1
    }

    Go语言中现阶段没有枚举,可以使用常量配合 iota 模拟枚举。

    type Weapon int

    const (
    Arrow Weapon = iota
    Shuriken
    SnoperRifle
    FileN
    NameN
    )

    func main() {
    fmt.Println(Arrow, Shuriken, SnoperRifle,FileN,NameN) // 0 1 2 3 4

    var weapon Weapon = NameN
    fmt.Println(weapon) // 4
    }

    Array常量的类型标识为 Weapon 这样标识后,const下方的常量可是默认类型的,默认时默认使用前面指定 类型作为常量类型。该行使用iota进行常量值自动生成。iota起始值为0,一般情况下也是建议枚举从0开始,让每个枚举类型都有一个空值,方便业务和逻辑的灵活使用。

    示例:标志位常量

    const (
    FlagNone = 1 << iota // 1*2^0
    FlagRed // 1*2^1
    FlagGreen // 1*2^2
    FlagBlue // 1*2^3
    )

    func main() {
    fmt.Printf("%d %d %d ", FlagRed, FlagGreen,FlagBlue)
    fmt.Printf("%b %b %b ", FlagRed, FlagGreen, FlagBlue)

    //2 4 8
    //10 100 1000
    }

    面试小题:

    
    
    func main() {
    const (
    a = iota
    b
    c
    d = 8
    e = 8
    f = iota
    g
    )
    fmt.Println(a, b, c, d, e, f, g)
    // 输出结果:0 1 2 8 8 5 6

    const(
    x = iota
    y
    )
    fmt.Println(x, y)
    // 输出结果:0 1
    }
    加油,你们是最棒的!
  • 相关阅读:
    数仓备机DN重建:快速修复你的数仓DN单点故障
    深度学习分类任务常用评估指标
    云小课 | MRS基础入门之HDFS组件介绍
    华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
    为什么vacuum后表还是继续膨胀?
    Go 自定义日志库
    Go time包
    Go 文件操作
    Go 包相关
    【程序人生】跟小伙伴们聊聊我有趣的大学生活和我那两个好基友!
  • 原文地址:https://www.cnblogs.com/Wshile/p/12661228.html
Copyright © 2011-2022 走看看