Go 2 Generics? A (P)review提案还包含一些其他的 备选语法: ○ generic(t) func .. ○ $t // 使用类型参数 ○ t // 实例化具体类型 评述 ● 确实是一个糟糕的设计 ● x := Vector(t)(v0) 这是两个函数调用吗? ● 尝试借用使用 C++ 的 Concepts 对类型参数的约束 1 type Greater(t) interface { 2 IsGreaterThan(t) Comparable)(v0 T, vn ...T) T { 7 switch l := len(vn); { 8 case l == 0: 9 return v0 10 case l == 1: 11 if v0 > vn[0] { return v0 } 12 return vn[0] 13 default: 14 vv := Max(vn[0], vn[1:]...) 15 if v0 > vv vv { return v0 } 16 return vv 17 } 18 } 合约是一个描述了一 组类型且不会被执行的函数体。 关键设计 ● 在合约中写 Go 语句对类型进行保障 ● 甚至写出条件、循 环、赋值语句 评述 ● 复杂的合约写法(合约内的代码写法可以有多少种?) ● 「一个不会执行的函数体」太具迷惑性 ● 实现上估计是一个比较麻烦的问题 [Revised] 20200 码力 | 41 页 | 770.62 KB | 1 年前3
Go 101 (Golang 101) v1.21.0different. type S3 S2 // S3 is a defined (so named) type type S4 S3 // S4 is a defined (so named) type var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} func f() { v1 = S1(v2); v2 = S2(v1) v1 = S1(v3); (§22) for details. func (t T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { ... } // An implicit method of *T is automatically defined as func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0, ...) ) { return (*pt).MethodX(v0, ...) } Please read this answer in the official Go FAQ to get more explanations. Which types can we implement methods for? Please read methods in Go (§22) for details0 码力 | 610 页 | 945.17 KB | 1 年前3
Go 101 (Golang 101) v1.21.0is a defined (so named) type 25 | type S4 S3 // S4 is a defined (so named) type 26 | 27 | var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} 28 | func f() { 29 | v1 = S1(v2); v2 = S2(v1) details. 1| func (t T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { 2| ... 3| } 4| 5| // An implicit method of *T is automatically defined as 6| func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0 (ResultType0, ...) { 7| return (*pt).MethodX(v0, ...) 8| } Please read this answer ? in the official Go FAQ to get more explanations. Which types can we implement methods for? Please read methods in Go0 码力 | 880 页 | 833.34 KB | 1 年前3
Go 101 (Golang 101) v1.21.0S3 is a defined (so named) type 25| type S4 S3 // S4 is a defined (so named) type 26| 27| var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} 28| func f() { 29| v1 = S1(v2); v2 = S2(v1) 1| func (t T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { 2| ... 3| } 4| 5| // An implicit method of *T is automatically defined as 6| func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0 (ResultType0, ...) { §51. Go FAQ 101 612 7| return (*pt).MethodX(v0, ...) 8| } Please read this answer ? in the official Go FAQ to get more explanations. Which types can we implement methods for0 码力 | 630 页 | 3.77 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aS4是一个定义类型(因而具名)。 20 | // 如果不考虑字段标签,S3(S4)和S1的底层类型一样。 21 | // 如果考虑字段标签,S3(S4)和S1的底层类型不一样。 22 | 23 | var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} 24 | func f() { 25 | v1 = S1(v2); v2 = S2(v1) MethodX(v0 ParamType0, ...) (ResultType0, ...) { 2| ... 3| } 4| 5| // 编译器将会为*T隐式声明一个如下的方法。 6| func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { 7| return (*pt).MethodX(v0, ...) 8|0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.atype S4 S3 // S4是一个定义类型(因而具名)。 // 如果不考虑字段标签,S3(S4)和S1的底层类型一样。 // 如果考虑字段标签,S3(S4)和S1的底层类型不一样。 var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} func f() { v1 = S1(v2); v2 = S2(v1) v1 = S1(v3); func (t T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { ... } // 编译器将会为*T隐式声明一个如下的方法。 func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { return (*pt).MethodX(v0, ...) } 更多解释请阅读Go官方FAQ中的这个问答0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a// 如果不考虑字段标签,S3(S4)和S1的底层类型一样。 21| // 如果考虑字段标签,S3(S4)和S1的底层类型不一样。 第16章:结构体 134 22| 23| var v0, v1, v2, v3, v4 = S0{}, S1{}, S2{}, S3{}, S4{} 24| func f() { 25| v1 = S1(v2); v2 = S2(v1) 26| MethodX(v0 ParamType0, ...) (ResultType0, ...) { 2| ... 3| } 4| 5| // 编译器将会为*T隐式声明一个如下的方法。 6| func (pt *T) MethodX(v0 ParamType0, ...) (ResultType0, ...) { 7| return (*pt).MethodX(v0, ..0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang Manual By AstaXie-20120522198 // makeImg allocates and initializes the destination image. 199 func (d *decoder) makeImg(h0, v0, mxx, myy int) { 200 if d.nComp == nGrayComponent { 201 m := image.NewGray(image.Rect(0 return 204 } 205 var subsampleRatio image.YCbCrSubsampleRatio 206 switch h0 * v0 { 207 case 1: 208 subsampleRatio = image.YCbCrSubsampleRatio444 209 case 2: 214 panic("unreachable") 215 } 216 m := image.NewYCbCr(image.Rect(0, 0, 8*h0*mxx, 8*v0*myy), subsampleRatio) 217 d.img3 = m.SubImage(image.Rect(0, 0, d.width, d.height)).(*image.YCbCr)0 码力 | 6205 页 | 12.83 MB | 1 年前3
共 8 条
- 1













