cafebabe go入门练习003:常量与iota

知识点

常量的值在编译时就已知,常量的底层类型是基本类型boolean,string或number。

常量定义格式:

const (
    e = 2.71828182845904523536028747135266249775724709369995957496696763
    pi = 3.14159265358979323846264338327950288419716939937510582097494459
)

常量定义还可以用常量生成器iota,在每个常量声明时,iota从0开始,逐一增长。

如定义星期常量:

type Weekday int
const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

使用iota结合位运算原理的例子:

package main

import "fmt"

//Flags 表示当前网络状态
type Flags uint

const (
	// FlagUp 是否开启
	FlagUp Flags = 1 << iota
	// FlagBroadcast 是否支持广播
	FlagBroadcast
	//FlagLoopback 是否支持本地环回
	FlagLoopback
	//FlagPointToPoint 是否支持点对点网络
	FlagPointToPoint
	//FlagMulticast 是否支持多播
	FlagMulticast
)

//IsUp 判断是否启用网络
func IsUp(v Flags) bool { return v&FlagUp == FlagUp }

//TurnDown 关闭网络
func TurnDown(v *Flags) { *v &^= FlagUp }

//SetBroadcast 设置为广播
func SetBroadcast(v *Flags) { *v |= FlagBroadcast }

//IsCast 判断是否为多播
func IsCast(v Flags) bool { return v&(FlagBroadcast|FlagMulticast) != 0 }

func main() {
	var v Flags = FlagMulticast | FlagUp
	fmt.Printf("%b %t
", v, IsUp(v)) // "10001 true"
	TurnDown(&v)
	fmt.Printf("%b %t
", v, IsUp(v)) // "10000 false"
	SetBroadcast(&v)
	fmt.Printf("%b %t
", v, IsUp(v))   // "10010 false"
	fmt.Printf("%b %t
", v, IsCast(v)) // "10010 true
}
原文地址:https://www.cnblogs.com/teacherma/p/13856691.html