在Golang中,我们可以通过type为变量定义一个类型,如下:
type NewInt int
func main(){
var a NewInt = 10
fmt.Println(a)
}
同时,也可以为这个类型扩展方法,如下:
package main
import "fmt"
type NewInt int
func (this *NewInt) Add(b NewInt){
*this += b
}
func main(){
var a NewInt = 10
var b NewInt = 20
a.Add(b)
fmt.Println(a)
}
这相当于创造了一个新的类型,看起来不错,但是,好奇的是,它的应用场景是什么呢?
在写它的应用场景之前,先说另一个知识点:
在Go中,函数也是一种变量,即是变量,我们就可以通过type为它定义一个类型。如 type Newtype func( int ) bool , 拥有相同的参数和相同的返回值就属于相同的类型。
既然函数是变量,那么我们就可以通过将函数定义成某个类型的变量,从而可以做为值或其它函数的参数进行值传递。
1 package main
2 import "fmt"
3
4 type HandlerFunc func(c int)
5
6 func testFunc(a HandlerFunc ) {
7 a(10)
8 }
9
10 func c(i int){ //具有相同的参数,所以与HandlerFunc是同类型
11 fmt.Println(i)
12 }
13
14 func main(){
15 testFunc( c )
16 }
bash$ go run i.go
〉10
具体的应用场景,只要看一下golang的web框架就明白了,比如说,iris的官方文档:Using HandlerFuncs
好久没有写文章了,组织起文字来似乎脑子总转不过来。????????