Приемник указателя и значение получателя различие в реализации с 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()?

Спасибо за ваше время и обмен.

Ответы на вопрос(2)

Ваш ответ на вопрос