Хотя Go позволяет вам создавать анонимные назначения функций для переменных и передавать их, еще один способ решения этой проблемы - использовать интерфейсы.
package main
import "fmt"
type Frobber interface {
Frob(int) string
}
type MyFrob struct {
Prefix string
}
func (m MyFrob) Frob(n int) string {
return fmt.Sprintf("%s %d", m.Prefix, n)
}
func Frob(f Frobber) {
fmt.Printf("Frob %s\n", f.Frob(42))
}
func main() {
myFrob := MyFrob {Prefix: "Hello"}
Frob(myFrob)
}
В объектно-ориентированном языке вы быбыть в состоянии просто передать метод, но Go не OO.Вы должны начать свой ум с самого начала и не пытаться писать код, как это было бы на других языках.У меня та же проблема с Python.
Кстати, я люблю Go и активно пытаюсь улучшить свои навыки с помощью этого инструмента в своем поясе инструментов.Отвечая на @Jeremy в комментариях, я только заявляю, что Go не является OO, потому что команда Go не поддерживает его так, и его чаще называют процедурным, и, имея смесь элементов из других языковкоторые сами считаются OO