常量在go语言中的运用示例

举报
码乐 发表于 2025/07/22 15:23:36 2025/07/22
【摘要】 1 简介在 Go 中,常量是使用 const 关键字声明的,并表示固定的、不可更改的值。 它们在编译时进行计算,这意味着它们的值必须在程序编译时知道,而不是在运行时知道。顾名思义,CONSTANTS 的意思是固定的。在编程语言中也是一样的,即一旦定义了常量的值,就不能进一步修改它。可以有任何基本的常量数据类型,例如整数常量、浮动常量、字符常量或字符串文字。如何申报: 常量的声明类似于变量,...

1 简介

在 Go 中,常量是使用 const 关键字声明的,并表示固定的、不可更改的值。 它们在编译时进行计算,这意味着它们的值必须在程序编译时知道,而不是在运行时知道。

顾名思义,CONSTANTS 的意思是固定的。在编程语言中也是一样的,即一旦定义了常量的值,就不能进一步修改它。可以有任何基本的常量数据类型,例如整数常量、浮动常量、字符常量或字符串文字。

如何申报: 常量的声明类似于变量,但使用 const 关键字作为前缀来声明具有特定类型的常量。不能使用“:=”语法声明它。

2 常量的主要特征:

声明: 常量是使用 const 关键字声明的,类似于变量,但不能使用短变量声明 := 语法声明它们。

const Pi = 3.14159
const Greeting string = "Hello, Go!"
  • 类型:

常量可以保存字符、字符串、布尔值或数值。

  • 范围:

常量可以在函数内部和外部声明,类似于变量。

  • 不变性:

一旦声明并分配了值,常量的值就无法在程序执行期间更改。 任何修改常量的尝试都会导致编译时错误。

  • 编译时评估:

常量表达式(包括涉及其他常量的计算)在编译时进行计算。 这允许使用数值常量进行高精度计算,甚至超过内置数字类型的限制,直到它们被分配给特定类型的变量。

  • 非类型化数值常量:

可以在没有显式类型的情况下声明数字常量。 这些非类型化常量的行为类似于常规数字,可以在具有不同数字类型的作中使用,而无需显式类型转换,直到它们被分配给类型化变量。

  • 非类型化和类型化数字常量:

类型化常量的工作方式类似于不可变变量只能与相同类型互作,而非类型化常量的工作方式类似于文字可以与类似类型互作。

在 Go 中可以声明带有或不带有类型的常量。下面是显示命名和未命名的类型化和非类型化数字常量的示例。

	const untypedInteger          = 123
	const untypedFloating          = 123.12

	const typedInteger  int             = 123
	const typedFloatingPoint   float64  = 123.12

以下是 Go 语言中的常量列表:

	数值常量(整数常量、浮点常量、复常数)

前缀指定基数或基数:0x 或 0X 表示十六进制,0 表示八进制,不表示十进制。

整数文字也可以有一个后缀,该后缀是 U(大写)和 L(小写)的组合,分别表示无符号和长它可以是十进制、八进制或十六进制常数,int 最多可以存储 64 位整数,有时甚至更少。

	字符串

Go 支持两种类型的字符串文字,即 “ ”(双引号样式)和 (反引号)。
字符串可以使用 + 和 += 运算符连接。

字符串包含类似于字符文字的字符:纯字符、转义序列和通用字符。这是未类型的。
字符串类型的零值是空白字符串,可以用文字中的“”或表示。

字符串类型都可以通过使用 ==、!= 和 (用于比较相同类型) 等运算符进行比较

	布尔常量

布尔常量: 布尔常量类似于字符串常量。它应用与字符串常量相同的规则。区别仅在于它有两个非类型常量 true 和 false。

不可改变常量的值,常量不可赋值给其他常量。

	const Pi = 3.14

	func main() 
	{
	    const trueConst = true
	    
	    // Type definition using type keyword
	    type myBool bool    
	    var defaultBool = trueConst // allowed
	    var customBool myBool = trueConst // allowed
	    
	    //  defaultBool = customBool // not allowed
	    fmt.Println(defaultBool)
	    fmt.Println(customBool)   
	}

3 常量用作枚举类型

      const (
      a = iota // 0
      b = iota // 1
      c = iota // 2
  )

或者

  const (
      a = iota // 0
      b        // 1
      c        // 2
       )

省略

  const (
      _ = iota      // 0
      b = iota * 10 // 1 * 10
      c = iota * 10 // 2 * 10
  )

分开写则重新计数

    const (
        a = iota // 0
        b        // 1
        c        // 2
    )
    const (
        d = iota // 0
        e        // 1
        f        // 2
    )

结合位运算

    const (
        _  = iota             // 0
        KB = 1 << (iota * 10) // 1 << (1 * 10)
        MB = 1 << (iota * 10) // 1 << (2 * 10)
        GB = 1 << (iota * 10) // 1 << (3 * 10)
        TB = 1 << (iota * 10) // 1 << (4 * 10)
    )

用于表示存储大小

    type ByteSize float64

    const (
        a_          = iota // ignore first value by assigning to blank identifier
        KB ByteSize = 1 << (10 * iota)
        MB
        GB
        TB
        PB
        EB
        ZB
        YB
    )

    func main() {
        fmt.Println(a, b, c, d, e, f)
        //fmt.Println(b)
        //fmt.Println(c)
        //fmt.Println(d)
        //fmt.Println(e)
        //fmt.Println(f)
        fmt.Println(a_, KB, MB, GB, TB, PB, EB, ZB, YB)
    }
【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。