Приемник указателя и значение получателя различие в реализации с Iris Framework
Я недавно изучаю Iris Framework. Я столкнулся с вопросом при реализации обработчика. Как следующее:
package controller
import "github.com/kataras/iris"
type Pages struct{
}
func (p *Pages) Serve(c *iris.Context) {
}
Чтобы использовать этот контроллер, я реализовал следующий сценарий ввода:
package main
import (
"github.com/kataras/iris"
"web/controller"
)
func main(){
ctrl := controller.Pages{}
iris.Handle("GET", "/", ctrl)
iris.Listen(":8080")
}
Но когда я скомпилировал код, я получил следующее сообщение об ошибке:
cannot use ctrl (type controllers.Pages) as type iris.Handler in argument to iris.Handle:
controllers.Pages does not implement iris.Handler (Serve method has pointer receiver)
После того как я изменил объявление на:
ctrl := &controller.Pages{}
Затем компилятор прошел без нареканий.
Вопрос в следующем: я думал, что следующие операторы равны, поскольку компилятор GO выполнит преобразование по таблице:
type Pages struct {
}
func (p *Pages) goWithPointer() {
fmt.Println("goWithPointer")
}
func (p Pages) goWithValue() {
fmt.Println("goWithValue")
}
func main() {
p1 := Pages{}
p2 := &Pages{}
p1.goWithPointer()
p1.goWithValue()
p2.goWithPointer()
p2.goWithValue()
}
Почему я не могу использоватьctrl := controller.Pages{}
в качестве параметра дляiris.Handle()
, вместоctrl := &controller.Pages{}
в качестве параметра дляiris.Handle()
?
Спасибо за ваше время и обмен.