zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    在JBuilder8中使用ANT
    协程初探
    JavaScript编写了一个计时器
    Codeforces Round #272 (Div. 1)D(字符串DP)
    UI測试内容
    我为什么做程序猿訪谈录
    使用Java高速实现进度条
    做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)
    将markdown格式转化为bootstrap风格html
    char* 和char[]的差别
  • 原文地址:https://www.cnblogs.com/teacherma/p/13856691.html
Copyright © 2011-2022 走看看