课外话题
来源:1-2 课程介绍及知识要点预习
sliverg
2018-06-28
老师您好,看了一段时间的GO语言基础,但是还是不理解go中interface的使用场景,能麻烦解释一下吗
写回答
1回答
-
go里面的interface用了计算机语言设计理论中的duck typing。用隐式的自动实现替代了java中必须显式的实现。这样做的好处就是我们只要在struct中实现了相同的method,那么这个struct就会自动实现相应的interface。
至于interface的应用场景呢,可以看一下我们写的middleware:
type middleWareHandler struct { r *httprouter.Router } func NewMiddleWareHandler(r *httprouter.Router) http.Handler { m := middleWareHandler{} m.r = r return m } func (m middleWareHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //check session validateUserSession(r) m.r.ServeHTTP(w, r) }我们这里实现了http.Handler这个原生interface的ServeHTTP这个method,因此我们等于就隐式的实现了这个interface,因此在下面才会有这样的使用:
mh := NewMiddleWareHandler(r) http.ListenAndServe(":8000", mh)mh就是http.Handler的实现。
这是go在实现多态的一种常规用法
112019-01-15
相似问题