在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

好久没有写文章了,组织起文字来似乎脑子总转不过来。????????