func (h *Human) Speak() {
}
Если глянуть на внутренности языка, то метод это по сути обычная функция, у которой первым параметром является ресивер (тот объект, у которого вызывается метод). То есть, компилятор этот код превратит в
func Speak(h *Human) {
}
Соответственно, при вызове метода в случае *Human будет передача структуры по указателю, а в случае Human, по значению, со всеми вытекающими.
Что касается ошибки про несоответствие интерфейсу, то тут надо учесть, что если у структуры определены методы через указатель, то и соответствовать интерфейсу будет указатель на эту структуру:
https://go.dev/play/p/o7EsGmeYSRS
Если же без указателя, то соответствовать интерфейсу будет сама структура:
https://go.dev/play/p/oTsXP4DXaMJ
Но оба одновременно определить не получится.