Go 语法缺失替代方案

Go 语言设计以简洁见长,但是缺少了一些其他语言常见的枚举、do while等语法。实践中,需要此类语法时,就要学会常见的替代方案。学会后,你就会发现,实际上Go设计更加巧妙。

一、枚举类型

常用的方法是用const 定义常量来替代。网上常见的是

type PolicyType int

const (
    POLICY_MIN       PolicyType = 0
    POLICY_MAX      PolicyType = 1
    POLICY_MID       PolicyType = 2
    POLICY_AVG       PolicyType = 3
)

这种方法可行,但是当枚举数量比较多时,输入字符太多了,比较麻烦。

Go 提供了一个预定义的标识符iota来简化这种顺序号比较多的场合。这样,以上例子就可以简化为

type PolicyType int

const (
    POLICY_MIN       PolicyType = iota
    POLICY_MAX     
    POLICY_MID      
    POLICY_AVG      
)

这样就省事多了。

itoa起始序号为0,对于起始序号为其他数(如1)时,只要加上起始数即可,如下面的枚举序号就从1开始。

type PolicyType int

const (
    POLICY_MIN       PolicyType = iota+1
    POLICY_MAX     
    POLICY_MID      
    POLICY_AVG      
)

二、do while语句

对于do while 语句,有下面两种替代方案

方案1:

for ok := true; ok; ok = condition {
	work()
}

方案2:

for {
	work()
	if !condition {
		break
	}
}

方案1属于Go的特色,方案2 就中规中矩了。

Go里的for循环十分强大,完全可以替代do while 和 while do 语句。看了方案1,你就知道对于while do 如何写了。

发表评论