莫粒 的多维空间


关于 | GitHub | Twitter

golang没有枚举类型与泛型的尴尬

小莫最近一直用golang作为主要是静态语言。

非常简单易学的语言,如果你有其他的语言基础的话。

golang第三方库很丰富了,而且语法简单,不用担心内存管理,自动gc,可优化的天花板也很高。

总的来说是一门有前途的语言。

最近用golang最大的尴尬是没有枚举类型。

枚举

你可以用const声明常量,但是常量跟枚举类型还是有差别的。

const (
	a = iota
    b
    c
)
type Fuck struct {
	a int
}

但是如果碰到上面这样的,你要如何约束成员变量a呢……

我只想a = 上面的枚举类型…… 怎么约束…… 尴尬啊,所以如果golang有这样的语法:

type A enum {
	a = aota
    b
    c
}
type Fuck struct {
	a A
}

f := Fuck{a: a.b}

多好啊= =! golang就应该要有枚举类型啊。

再说泛型

学过c++的应该知道泛型,模板编程的威力。golang的开发者不想让golang变复杂,所以不提供泛型。但是据说2017年会加入泛型?

其实加入没什么关系啊,喜欢用的用,不喜欢的别用。

就好比python使用者不需要元编程,但是ruby使用者都必须会元编程一样(都怪rails,那么多元编程= =!)。

不用泛型,一样能写出好的代码~ 比如golang下流行的“面向接口” 编程,跟模板编程,有那么几分相似~

之所以我觉得需要泛型,是因为在写rkproxy这个项目,会有多个不同的“代理角色”, 但是他们共同的方法都有 start,stop等。

其实用接口也可以,但是没那么优美了~~~