package main
import (
"fmt"
"github.com/ant0ine/go-json-rest"
"net/http"
)
type App struct {
Id string
Name string
}
func GetApp(w *rest.ResponseWriter, req *rest.Request) {
user := App{
Id: req.PathParam("id"),
Name: "Antoine",
}
w.WriteJson(&user)
}
type MyResourceHandler struct {
rest.ResourceHandler
}
type ResourceController interface {
Show(w *rest.ResponseWriter, req *rest.Request)
Create(w *rest.ResponseWriter, req *rest.Request)
Update(w *rest.ResponseWriter, req *rest.Request)
Delete(w *rest.ResponseWriter, req *rest.Request)
}
func (self *MyResourceHandler) AddResource(name string, c ResourceController) error {
show_func := func(w *rest.ResponseWriter, r *rest.Request) {
c.Show(w, r)
}
create_func := func(w *rest.ResponseWriter, r *rest.Request) {
c.Create(w, r)
}
update_func := func(w *rest.ResponseWriter, r *rest.Request) {
c.Update(w, r)
}
delete_func := func(w *rest.ResponseWriter, r *rest.Request) {
c.Delete(w, r)
}
err := self.ResourceHandler.SetRoutes(
rest.Route{"GET", fmt.Sprintf("/%s/:id", name), show_func},
rest.Route{"POST", fmt.Sprintf("/%s", name), create_func},
rest.Route{"PUT", fmt.Sprintf("/%s/:id", name), update_func},
rest.Route{"DELETE", fmt.Sprintf("/%s/:id", name), delete_func},
)
return err
}
type AppController struct{}
func (self *AppController) Show(w *rest.ResponseWriter, r *rest.Request) {
app := App{
Id: r.PathParam("id"),
Name: "Antoine",
}
w.WriteJson(&app)
}
func (self *AppController) Create(w *rest.ResponseWriter, r *rest.Request) {
app := App{
Id: r.PathParam("id"),
Name: "Antoine",
}
w.WriteJson(&app)
}
func (self *AppController) Update(w *rest.ResponseWriter, r *rest.Request) {
app := App{
Id: r.PathParam("id"),
Name: "Antoine",
}
w.WriteJson(&app)
}
func (self *AppController) Delete(w *rest.ResponseWriter, r *rest.Request) {
app := App{
Id: r.PathParam("id"),
Name: "Antoine",
}
w.WriteJson(&app)
}
func main() {
handler := MyResourceHandler{}
controler := AppController{}
handler.AddResource("app", controler)
http.ListenAndServe(":9008", &handler)
}
我已經實現了所有的接口ResourceController
的四種方法,但它告訴我:爲什麼我的Go代碼不能運行?
./fakeapi.go:93: cannot use controler (type AppController) as type ResourceController in function argument:
AppController does not implement ResourceController (Create method requires pointer receiver)