Go умеет самостоятельно разименовывать указатели при вызове метода.
Т.е. так как у нас по факту переменная `second` является указателем на структуру `firstStruct`, то мы должны были бы предварительно разименовать, перед вызовом метода `init`:
var second *firstStruct = &firstStruct{}
(*second).init()
Но Go знает что это указатель и в синтаксисе можно производить вызов метода напрямую, а Go самостоятельно разименует указатель на структуру.
second.init()
У конструкции `&secondStruct{}` нет ошибки, так как сигнатура метода описывает работу с указателем на структуру:
func (f *secondStruct) init() {...}
Поэтому такая консрукция в данном случае не доступна:
var f ifRealization = secondStruct{}