Функции как члены в структурах - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь сделать функцию членом моей структуры

type myStruct struct {
    myFun func(interface{}) interface{}
}
func testFunc1(b bool) bool {
    //some functionality here
    //returns a boolean at the end
}
func testFunc2(s string) int {
    //some functionality like measuring the string length
    // returns an integer indicating the length
}
func main() {
    fr := myStruct{testFunc1}
    gr := myStruct{testFunc2}
}

Я получаю сообщение об ошибке:

Cannot use testFunc (type func(b bool) bool) as type func(interface{}) interface{}
Inspection info: Reports composite literals with incompatible types and values.

Я не могу понять, почему я получаю этоошибка.

1 Ответ

0 голосов
/ 02 февраля 2019

Проблема вашего кода в несовместимых типах между объявлением в структуре и testFunc.Функция, принимающая interface{} и возвращающая interface{}, не имеет того же типа, что и функция, принимающая и возвращающая bool, поэтому инициализация завершается неудачно.Вставленное вами сообщение об ошибке компилятора находится прямо здесь.


Это будет работать:

package main

type myStruct struct {
    myFun func(bool) bool
}

func testFunc(b bool) bool {
    //some functionality here
    //returns a boolean at the end
    return true
}

func main() {
    fr := myStruct{testFunc}
}
...