http - 如何覆盖 GoLang 中的组合结构方法

标签 http oop go routing overriding

我想在 GoLang 中制作一个 Controller struct,它有一个 ServeHTTP 方法,该方法调用它自己的方法(以 405 状态响应代码)基于 HTTP 请求的代码。新的 Controller 应该能够继承 ServeHTTP,同时也能够覆盖 Get(w http.ResponseWriter, r *http.Request) 等方法并触发新的方法通过 ServeHTTP。然后,可以使用 http 模块将 Controller 指定为路由处理程序。我知道如何在 Java 中执行此操作(有一个包含所有基本方法的 Controller 父类(super class)),但方法覆盖部分在 Go 中失败。这是我的代码:

package main

import "net/http"

type Controller struct { }

func notAllowed(w http.ResponseWriter){
    w.WriteHeader(http.StatusMethodNotAllowed)
    w.Write([]byte("405- Method Not Allowed"))
}
func(c Controller)  Get(w http.ResponseWriter, r *http.Request){
    notAllowed(w)
}
func(c Controller)  Post(w http.ResponseWriter, r *http.Request){
    notAllowed(w)   
}
func(c Controller)  Put(w http.ResponseWriter, r *http.Request){
    notAllowed(w)   
}
func(c Controller)  Patch(w http.ResponseWriter, r *http.Request){
    notAllowed(w)   
}
func(c Controller)  Delete(w http.ResponseWriter, r *http.Request){
    notAllowed(w)   
}
func(c Controller)  ServeHTTP(w http.ResponseWriter, r *http.Request){
    switch r.Method {
        case "GET":
            c.Get(w, r)
        case "POST":
            c.Post(w, r)
        case "PUT":
            c.Put(w, r)
        case "PATCH":
            c.Patch(w, r)
        case "DELETE":
            c.Delete(w, r)
    }
}
type Index struct {
  Controller  
}
func(I Index) Get(w http.ResponseWriter, r http.Request){
  w.Write([]byte("hello"))
}
func main(){
  http.Handle("/", Index{})
  http.ListenAndServe(":8080", nil)
}

最佳答案

感谢@mkopriva;这是他在评论中给出的答案: https://play.golang.org/p/1-LEOjTo0AX

显然方法只会被反向组合覆盖。

关于http - 如何覆盖 GoLang 中的组合结构方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352734/

相关文章:

c++ - 在这种情况下不使用 'protected' 的任何理由(cpp、c++、oop)

java - Python 中的嵌套对象

json - 使用 Go 解析 .Net JSON 日期

go - 如何从嵌套函数修改 struct boolean?

php - Phalcon,生成图像的 HTTP 缓存

c# - UploadFromStream 到 Azure blob 时超出最大请求长度异常

javascript - 所有 Node.js/Express 路由在托管服务器上返回 404

http - 关于Http大文件下载的MD5校验

java - 如何在主类中将面板类添加到我的框架中

jquery & 去 : how do you set a json header