"Если ходит как утка и крякает - это утка". В Go это неявная реализация интерфейса: тип не объявляет интерфейс, но если у него есть нужные методы - он подходит. Компилятор проверяет это статически. Часто говорят "structural typing" для интерфейсов.