想深入了解Golang中的Const用法

想深入了解Golang中的Const用法 你好,

我想了解为什么下面的代码输出是 7 7 7:

package main
import "fmt"
const (
i = 7
j
k
)
func main() {
fmt.Println(i, j, k)
}
4 回复

更多关于想深入了解Golang中的Const用法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我尝试搜索了相关文档,但未能找到。我确实阅读了关于 iota 的内容,但使用它需要在赋值时包含 iota。如果可能的话,能否请您分享相关文档链接?

RAJ_SINGH:

  • package main
  • import “fmt”
  • const (
  • i = 7
  • j
  • k
  • )
  • func main() {
  • fmt.Println(i, j, k)
  • }

因为如果未为常量指定类型/值,它将从前一个常量中获取。

package main

import "fmt"

const (
    i = 7
    j
    k
)

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

在Go语言中,常量声明时如果省略了初始化表达式,会复用前一个常量的表达式。在你的代码中:

const (
    i = 7  // 显式赋值为7
    j      // 省略初始化,复用i的表达式,值为7
    k      // 省略初始化,复用j的表达式,值为7
)

这种特性在定义一组相关常量时特别有用,可以减少重复代码。更完整的示例:

const (
    a = 1
    b        // b = 1
    c        // c = 1
    
    d = iota * 10  // d = 0 * 10 = 0
    e              // e = 1 * 10 = 10
    f              // f = 2 * 10 = 20
    
    g = "hello"
    h              // h = "hello"
)

输出验证:

package main
import "fmt"

const (
    i = 7
    j
    k
)

const (
    a = 1
    b
    c
    
    d = iota * 10
    e
    f
    
    g = "hello"
    h
)

func main() {
    fmt.Println(i, j, k)        // 输出: 7 7 7
    fmt.Println(a, b, c)        // 输出: 1 1 1
    fmt.Println(d, e, f)        // 输出: 0 10 20
    fmt.Println(g, h)           // 输出: hello hello
}

这种省略初始化的语法只适用于常量组(const block),单个常量声明必须显式初始化。

回到顶部