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

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

Patricia Arquette
Patricia Arquette원래의
2024-12-11 09:37:10702검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.