ITPub博客

首页 > 应用开发 > Go语言 > Go语言常量之定义与技巧!

Go语言常量之定义与技巧!

原创 Go语言 作者:老男孩Linux 时间:2025-12-04 13:49:58 0 删除 编辑

  常量是一个简单值的标识符,在程序运行时,永远是只读的,不能修改。

  使用 const 关键字定义常量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

  常量定义

  第一种,显式类型定义

  const name string = "oldboy"

  第二种,隐式类型定义,一个未指定类型的常量由上下文来决定其类型

  const age = 18

  第三种,一次性定义多个常量

  const Mon, Tues, Wed, Thur, Fri, Sat, Sun = 1, 2, 3, 4, 5, 6, 7

  const (

  name = "oldboy"

  age = 18

  )

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

  const (

  a = "abc"

  b = len(a)

  c = unsafe.Sizeof(b)

  )

  常量技巧

  未使用的局部常量不会引发编译错误。实例如下:

  package main

  func main() {

  const str = "The old boy welcomes you."

  }

  在常量组中,如不提供类型和初始化值,那么视作与上一个常量相同。实例如下:

  package main

  import (

  "fmt"

  )

  func main() {

  const (

  name = "oldboy"

  nickname

  )

  fmt.Printf("name : %s, nickname : %s\n", name, nickname)

  }

  运行结果:

  name : oldboy, nickname : oldboy

  特殊常量

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

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

  关键字 iota 定义常量组中从 0 开始按行计数的自增枚举值。实例如下:

  package main

  import (

  "fmt"

  )

  const (

  Sunday = iota

  Monday

  Tuesday

  Wednesday

  Thursday

  Friday

  Saturday

  )

  func main() {

  fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)

  }

  运行结果:

  0 1 2 3 4 5 6

  在同一常量组中,可以提供多个 iota,它们各自增长。实例如下:

  package main

  import (

  "fmt"

  )

  const (

  A1, B1 = iota, iota << 10

  A2, B2

  )

  func main() {

  fmt.Println(A1, B1, A2, B2)

  }

  运行结果:

  0 0 1 1024

  如果 iota 自增被打断,须显式恢复。实例如下:

  package main

  import (

  "fmt"

  )

  const (

  Sun = iota

  Mon

  Tues

  Wed = "Wednesday"

  Thur

  Fri = iota

  Sat

  )

  func main() {

  fmt.Println(Sun, Mon, Tues, Wed, Thur, Fri, Sat)

  }

  运行结果:

  0 1 2 Wednesday Wednesday 5 6


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3104340/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
老男孩it教育——致力于帮助有志向的年轻人通过努力学习获得体面的工作和生活。专注于Linux云计算运维、Python全栈开发、网络安全、新媒体运营、容器云架构师、MySQL数据库、go语言的培训。学习可call:18710030740

注册时间:2019-11-06

  • 博文量
    389
  • 访问量
    1009445