课外话题

来源:1-2 课程介绍及知识要点预习

sliverg

2018-06-28

老师您好,看了一段时间的GO语言基础,但是还是不理解go中interface的使用场景,能麻烦解释一下吗

写回答

1回答

艾文西

2018-06-28

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在实现多态的一种常规用法

1
1
sliverg
非常感谢!
2019-01-15
共1条回复

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程