> 백엔드 개발 > Golang > Golang에서 함수를 전달할 때 '함수(func() 유형)를 인수의 유형으로 사용할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?

Golang에서 함수를 전달할 때 '함수(func() 유형)를 인수의 유형으로 사용할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-11 09:37:10
원래의
667명이 탐색했습니다.

Why Does Golang Throw a

"함수(func() 유형)를 인수의 유형으로 사용할 수 없습니다."

Golang에서 함수를 다른 함수에 인수로 전달할 때 유형 서명은 전달된 함수의 서명은 수신 함수의 예상 서명과 일치해야 합니다. 코드에서 다음 함수를 인수로 전달하려고 합니다.

UpperCaseHandler
RepeatHandler
로그인 후 복사

그러나 메시지 처리기 함수에 대해 예상되는 유형 서명은 다음과 같습니다.

type MessageHandler func(MessageDelivery) (interface{}, error)
로그인 후 복사

보시다시피 , 예상되는 메시지 핸들러 함수는 MessageDelivery 구조체를 인수로 사용하고 인터페이스{}와 오류를 반환합니다. 그러나 함수는 다음과 같이 정의됩니다.

func UpperCaseHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
}

func RepeatHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
}
로그인 후 복사

함수에 반환 값(인터페이스{} 및 오류)이 누락되었습니다. 이 문제를 해결하려면 예상 서명과 일치하도록 함수를 수정해야 합니다. 이를 수행하는 방법은 다음과 같습니다.

func UpperCaseHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
     return nil, nil
}

func RepeatHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
     return nil, nil
}
로그인 후 복사

누락된 반환 값을 추가하면 이제 함수가 예상 서명과 일치하며 " 오류가 발생하지 않고 해당 값을 다른 함수에 인수로 전달할 수 있습니다. 함수(func() 유형)를 인수의 유형으로 사용할 수 없습니다." 오류.

위 내용은 Golang에서 함수를 전달할 때 '함수(func() 유형)를 인수의 유형으로 사용할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿