Go 语言常量 枚举常量

Go 语言常量

Go语言中的常量也分为整型常量、实型常量、字符常量、字符串常量、自定义常量。

自定义常量: const 常量名称 数据类型 = 值or const 常量名称 = 值

package main
import "fmt"
func main() {
    
    
  //const PI float32 = 3.14
  //PI = 110 // 报错
  //fmt.Println("PI = ", PI )

  const PI = 3.14
  PI = 110 // 报错
  fmt.Println("PI = ", PI )
}

除此之外Go语言还支持一次性定义多个常量

package main

import "fmt"

func main() {
    
    
	// 多重赋值方式
	const num1, num2 int = 100, 200
	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)

	// 常量组方式
	const (
		num3 = 100
		num4 = 200
	)
	fmt.Println("num3 = ", num3)
	fmt.Println("num4 = ", num4)

	// 常量组+多重赋值
	const (
		num5, num6 = 100, 200
		num7       = 300
	)
	fmt.Println("num5 = ", num5)
	fmt.Println("num6 = ", num6)
	fmt.Println("num7 = ", num7)
}

Go语言自定义常量注意点

  • 定义的局部变量或者导入的包没有被使用, 那么编译器会报错,无法编译运行。
  • 但是定义的常量没有被使用,编译器不会报错, 可以编译运行。
package main
import "fmt"
func main() {
    
    
  // 可以编译运行
  const PI float32 = 3.14
}
package main

import "fmt"

func main() {
    
    
	const (
		num1 = 998
		num2 = num1 // 和上一行的值一样
		num3 = 666
		num4 = num3 // 和上一行的值一样
		num5 = num4 // 和上一行的值一样
	)
	fmt.Println("num1 = ", num1) // 998
	fmt.Println("num2 = ", num2) // 998
	fmt.Println("num3 = ", num3) // 666
	fmt.Println("num4 = ", num4) // 666
	fmt.Println("num5 = ", num5) // 666

	const (
		num6, num7 = 100, 200
		num8, num9 = num6, num7 // 和上一行的值一样
	)
	fmt.Println("num6 = ", num6)
	fmt.Println("num7 = ", num7)
	fmt.Println("num8 = ", num8)
	fmt.Println("num9 = ", num9)
}

枚举常量

借助iota标识符来实现枚举类型。

利用iota标识符标识符实现从0开始递增的枚举:

package main

import "fmt"

func main() {
    
    
	const (
		male   = iota
		female = iota
		yao    = iota
	)
	fmt.Println("male = ", male)   // 0
	fmt.Println("male = ", female) // 1
	fmt.Println("male = ", yao)    // 2
}
wgchen@wgchen-virtual-machine:~/桌面/test$ go run .
male =  0
male =  1
male =  2
wgchen@wgchen-virtual-machine:~/桌面/test$ 

iota注意点:

  • 在同一个常量组中,iota从0开始递增, 每一行递增1。
  • 在同一个常量组中,只要上一行出现了iota,那么后续行就会自动递增。
package main

import "fmt"

func main() {
    
    
	const (
		male   = iota // 这里出现了iota
		female        // 这里会自动递增
		yao
	)
	fmt.Println("male = ", male)   // 0
	fmt.Println("male = ", female) // 1
	fmt.Println("male = ", yao)    // 2
}

在同一个常量组中,如果iota被中断, 那么必须显示恢复。

package main

import "fmt"

func main() {
    
    
	const (
		male = iota
		// 这里被中断, 如果没有显示恢复, 那么下面没有赋值的常量都和上一行一样
		female = 666
		yao
	)
	fmt.Println("male = ", male)   // 0
	fmt.Println("male = ", female) // 666
	fmt.Println("male = ", yao)    // 666
}
package main

import "fmt"

func main() {
    
    
	const (
		male   = iota
		female = 666 // 这里被中断
		// 这里显示恢复, 会从当前常量组第一次出现iota的地方开始,每一行递增1, 当前是第3行,所以值就是2
		yao = iota
	)
	fmt.Println("male = ", male)   // 0
	fmt.Println("male = ", female) // 666
	fmt.Println("male = ", yao)    // 2
}

iota也支持常量组+多重赋值, 在同一行的iota值相同。

package main

import "fmt"

func main() {
    
    
	const (
		a, b = iota, iota
		c, d = iota, iota
	)
	fmt.Println("a = ", a) // 0
	fmt.Println("b = ", b) // 0
	fmt.Println("c = ", c) // 1
	fmt.Println("d = ", d) // 1
}

iota自增默认数据类型为int类型, 也可以显示指定类型。

猜你喜欢

转载自blog.csdn.net/weiguang102/article/details/132756784