首页 > 文章列表 > Go语言基础枚举的用法及示例详解

Go语言基础枚举的用法及示例详解

golang
205 2022-12-17

概述

将变量的值一一列举出来,变量只限于列举出来的值的范围内取值

Go语言中没有枚举这种数据类型的,但是可以使用const配合iota模式来实现

一、普通枚举


const (

	 cpp = 0

	 java = 1

	 python = 2

	 golang = 3

)

二、自增枚举

iota只能在常量的表达式中使用


fmt.Println(iota)  //undefined: iota

它默认开始值是0,const中每增加一行加1


const (

        a = iota  //0

        c         //1

        d         //2

    )

每次 const 出现时,都会让 iota 初始化为0


const d = iota    // a=0

const (

	  e = iota     //b=0

	  f            //c=1

)

如果中断iota,必须显式恢复!!!


const ( 

    Low = iota    //0

    Medium        //1

    High = 100   //100

    Super        //100

    Band = iota  //4

)

如果是同一行,值都一样


const (

i          = iota

j1, j2, j3 = iota, iota, iota

k          = iota

)

可跳过的值


const (

		k1 = iota // 0

		k2        // 1

		_         //2

		_         //3

		k3       // 4

	)

中间插入一个值


const (

	Sun = iota //Sun = 0

	Mon        // Mon = 1

	Tue = 7    //7

	Thu = iota // 3

	Fri        //4

)

注意

  • iota 必须配合const 使用,否则undefined: iota
  • 每次 const 出现时,都会让 iota 初始化为0
  • 如果是同一行,值都一样

代码


package main

import "fmt"

func main() {

	//普通枚举

	const (

		cpp    = 0

		java   = 1

		python = 2

	)

	fmt.Printf("cpp=%d  java=%d  python=%d\n", cpp, java, python) //a=0  b=1  c=2

	//1.iota只能在常量的表达式中使用

	//fmt.Println(iota)  //undefined: iota

	//2.它默认开始值是0,const中每增加一行加1

	const (

		a = iota //0

		b        //1

		c        //2

	)

	fmt.Printf("a=%d  b=%d  c=%d\n", a, b, c) //a=0  b=1  c=2

	//3.每次 const 出现时,都会让 iota 初始化为0

	const d = iota // a=0

	const (

		e = iota //b=0

		f        //c=1

	)

	fmt.Printf("d=%d  e=%d  f=%d\n", d, e, f) //d=0  e=0  f=1

	//4.如果中断iota,必须显式恢复!!!

	const (

		Low = iota //0

		Medium //1

		High = 100 //100

		Super //100

		Band = iota //4

	)

	//Low=0  Medium=1  High=100  Super=100  Band=4

	fmt.Printf("Low=%d  Medium=%d  High=%d  Super=%d  Band=%d\n", Low, Medium, High, Super, Band)

	//5.如果是同一行,值都一样

	const (

		i          = iota

		j1, j2, j3 = iota, iota, iota

		k          = iota

	)

	//i=0  j1=1  j2=1  j3=1  k=2

	fmt.Printf("i=%d  j1=%d  j2=%d  j3=%d  k=%d\n", i, j1, j2, j3, k)

	//6.可跳过的值

	const (

		k1 = iota // 0

		k2        // 1

		_         //2

		_         //3

		k3        // 4

	)

	//	k1=0  k2=1  k3=4

	fmt.Printf("k1=%d  k2=%d  k3=%d \n", k1, k2, k3)

	//7.中间插入一个值

	const (

		Sun = iota //Sun = 0

		Mon        // Mon = 1

		Tue = 7    //7

		Thu = iota // 3

		Fri        //4

	)

	//Sun=0  Mon=1  Tue=7  Thu=3  Fri=4

	fmt.Printf("Sun=%d  Mon=%d  Tue=%d  Thu=%d  Fri=%d\n", Sun, Mon, Tue, Thu, Fri)



}