Типы функций описаны в Golang Spec как:
Тип функции обозначает набор всех функций с одинаковыми
параметры и типы результатов.
Здесь четко указано, что функция с same parameter and result types
Существуют различные определения функций, которые вы передаете своей основной программе, и определения, которые требуются вашей функции. Если вы внимательно посмотрите на функцию ниже, вы передали t
в качестве аргумента test1
, который ничего не возвращает, но вы присваиваете его значение opt
, поэтому ошибка.
t (fname, lname) используется в качестве значения
Для второй ошибки, которая говорит:
не может использовать myfunc2 (тип func (string, string) string) в качестве типа
func (строка, строка) в аргументе для test1
С тех пор, как, если вы посмотрите на тип функции, которую вы передаете test1
в качестве аргумента, и тип аргумента, который вы определили в test1
, различаются.
Пожалуйста, проверьте ниже рабочий код.
package main
import "fmt"
func myfn1(i string) {
fmt.Println(i)
}
func myfunc2(firstName string, lastName string) string{
return "Hello "+ firstName + " " + lastName + "!"
}
func test(do func(string), val string){
do(val)
}
func test1(t func(string,string) string, fname string, lname string) string{
opt := t(fname,lname)
return opt
}
func main() {
test(myfn1, "Aishu")
greet := test1(myfunc2, "Aishu","S")
fmt.Println(greet)
}
Детская площадка Пример