Здравствуйте, недавно начал изучать Go и столкнулся с такой проблемой. Первая структура имеет метод с value receiver, а вторая структура с point receiver. Обе структуры реализуют интерфейс. В первом случае я присваиваю интерфейсу структуру по значению и по ссылке. Ошибки почему-то не выдает, хотя метод первой структуры имеет рисивер на значение, а не на адрес. Но во втором случае, если я пытаюсь передать вторую структуру не по ссылке, а по значению, то возникает ошибка, т.к интерфейс не реализуется. Сильно запутался и не могу понять, почему в первом случае интерфейс реализуется при передачи структуры и по значению, и по ссылке.
package main
import "fmt"
type ifRealization interface {
init()
}
type firstStruct struct{}
func (f firstStruct) init() {
fmt.Printf("Init; Type: %T Value: %v", f, f)
}
type secondStruct struct{}
func (f *secondStruct) init() {
fmt.Printf("Init; Type: %T Value: %v", f, f)
}
func main() {
var first ifRealization = firstStruct{}
var second ifRealization = &firstStruct{} // Ошибки нет
first.init()
second.init()
var f ifRealization = secondStruct{} //Type does not implement 'ifRealization' as the 'init' method has a pointer receiver
var s ifRealization = &secondStruct{} //Ошибки нет
}