碰到的问题
|
|
报错cannot use myHandler literal (type myHandler) as type http.Handler in argument to mux.Handle: myHandler does not implement http.Handler (ServeHTTP method has pointer receiver)
追一下mux.Handle方法
|
|
mux.Handle方法只需要第二个参数实现ServeHTTP方法即可
奇怪,这里传入的myHandler{}不是实现了ServeHTTP方法吗?
通过查资料得知指针类型(*T)对象包含接受者为T的方法,反之则不包含
放到这里意思就是,myHandler{}的指针(&myHandler{})实现了ServeHTTP方法,而myHandler对象本身没有实现
|
|
值方法与指针方法
|
|
那么什么时候用值方法,什么时候用指针方法呢?主要考虑以下一些因素:
1.如果方法需要修改receiver,那么必须使用指针方法;
2.如果receiver是一个很大的结构体,考虑到效率,应该使用指针方法;
3.一致性。如果一些方法必须是指针receiver,那么其它方法也应该使用指针receiver;
4.对于一些基本类型、切片、或者小的结构体,使用value receiver效率会更高一些。