昨天 Ian Lance Taylor 和 Robert Griesemer 发布了Go泛型的新的草案(The Next Step for Generics), 国内外的Gopher反响非常的热烈,大家纷纷对草案和这个文章进行了解读,并且感觉这一版的Go泛型设计基本接近于Go的泛型目标,总之比前一个方案好太多了。
type NumberString interface { typeint,int8,int16,int32,int64, uint,uint16,uint32,uint64, float32,float64, complex64,complex128, byte,uintptr,string } type Monoid(type A) interface{ Combine(x A, y A) A }
type Concat(type A NumberString) struct{}
func(c Concat(A)) Combine(x A, y A) A { return x + y }
// 一个和特化后的类型重名的类型 type instantiate୦୦Concat୦intstruct{}
$go tool go2go run monoid.go2 # command-line-arguments /var/folders/gq/jd9v5dd95p570hkztblb8ht40000gn/T/go2go-run795741129/monoid.go2:26: c.Combine undefined (type instantiate୦୦Concat୦int has no field or method Combine) /var/folders/gq/jd9v5dd95p570hkztblb8ht40000gn/T/go2go-run795741129/monoid.go2:31: c3.Combine undefined (type instantiate୦୦Concat୦int has no field or method Combine) /var/folders/gq/jd9v5dd95p570hkztblb8ht40000gn/T/go2go-run795741129/monoid.go2:32: instantiate୦୦Concat୦int redeclared in this block previous declaration at /var/folders/gq/jd9v5dd95p570hkztblb8ht40000gn/T/go2go-run795741129/monoid.go2:22 /Users/xxxxxx/go2go/goroot/bin/go [run monoid.go] failed: exit status 2