1.函数类型强转(适配器):

type HandlerFunc func(ResponseWriter, *Request)


// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
	f(w, r)
}

func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {

	mux.Handle(pattern, HandlerFunc(handler))
}

func (mux *ServeMux) Handle(pattern string, handler Handler)

type Handler interface {

	ServeHTTP(ResponseWriter, *Request)
}


由以上源码可见,Handle函数需要的是一个string类型的参数和一个Handler接口类型的参数,而HandleFunc函数中的handler是函数类型,并不是Handler接口类型,所以通过HandlerFunc这个函数类型(实现了Handler接口类型)对handler函数进行了强转,其实就是一种适配器!感觉强转的前提是函数参数的类型,个数,顺序得一致

2. 数组可以通过字面量来初始化

例:

var aa = [2]int{1,2}

难看一点的:

type Spider struct {

	i int
}

var list = [2]*Spider{}

之前没看懂,其实很简单,[2]*Spider与[2]int类似,代表类型,后面是具体值 ,当然括号里可以为空


3.map也可以通过字面量初始化

var aa= map[string]string{

        "a": "aa",
"b": "bb",

}

var aa=map[string]*Spider{}

这个也很简单map[string]*Spider与map[string]string类似,代表类型,后面是具体值 ,当然括号里可以为空