В Go вы можете передавать функции как параметры, такие как callFunction(fn func)
. Например:Использование имен функций в качестве параметров
package main
import "fmt"
func example() {
fmt.Println("hello from example")
}
func callFunction(fn func) {
fn()
}
func main() {
callFunction(example)
}
Но можно ли вызвать функцию, когда она является членом структуры? Следующий код потерпит неудачу, но дает вам пример того, что я говорю о:.
package main
import "fmt"
type Example struct {
x int
y int
}
var example Example
func (e Example) StructFunction() {
fmt.Println("hello from example")
}
func callFunction(fn func) {
fn()
}
func main() {
callFunction(example.StructFunction)
}
(я знаю, что я пытаюсь сделать в этом примере является немного странным точной проблема, я Безразлично Однако я также заинтригован об этом с научной точки зрения).
Я не пытался скомпилировать этот код, это был макет моей проблемы, которую я закодировал непосредственно в SO. Таким образом, ошибки типа package/program и x/y просто отсутствуют, а не проблема с моим исходным кодом. Я озадачен тем, как вы получили результат, потому что ваш код не срабатывает так же, как и мой: 'method example.StructFunction не является выражением, должно быть вызвано' [edit] ahh проблема - это версия Go I'm running (1.0.3) не поддерживает его. Совет. – laumars
'$ go version' ' go version devel + 1a196137ed09 Вт апр 09 18:17:55 2013 +1000 linux/amd64' Означает ли это, что Go теперь делает то, что вы хотите? – peterSO
Пока нет, но когда 1.1 выталкивает мои репозитории, то это будет. Учитывая, что всего за пару недель за углом, я рад ждать. – laumars