>  기사  >  백엔드 개발  >  Golang 데코레이터 함수에는 어떤 매개변수가 있나요?

Golang 데코레이터 함수에는 어떤 매개변수가 있나요?

WBOY
WBOY앞으로
2024-02-08 23:09:391418검색

Golang 装饰器函数的哪些参数

php 편집기 Baicao가 Golang 데코레이터 기능의 매개변수를 소개합니다. Golang에서 데코레이터 함수는 다른 함수를 래핑하고 추가 기능을 추가하는 데 사용할 수 있는 특수 함수입니다. 데코레이터 함수에는 일반적으로 원본 함수, 데코레이터 함수의 매개변수, 반환 값이라는 세 가지 매개변수가 있습니다. 원래 함수는 데코레이팅이 필요한 함수입니다. 데코레이터 함수의 매개변수는 모든 유형일 수 있으며 데코레이터 함수에 추가 매개변수를 전달하는 데 사용할 수 있습니다. 반환 값은 일반적으로 원래 함수의 실행을 대체하는 함수입니다. 기능. 이러한 매개변수를 통해 다양하고 유연한 데코레이터 모드를 구현하고, 함수에 다양한 기능을 추가하고, 코드의 재사용성과 확장성을 향상시킬 수 있습니다.

질문 내용

update과 같은 여러 adminapi 방법에 setter를 사용하고 싶습니다. 이를 위해 다른 메소드와 일치할 수 있는 메소드 유형을 만들었습니다.

func type 대신 인터페이스를 사용해야 하나요?

으아악
type adminapi struct {
}

type toadminctx func(ctx context.context, req interface{}) (interface{}, error)

func (a adminapi) adminm2msetter(s toadminctx) toadminctx {
    return func(ctx context.context, arg interface{}) (interface{}, error) {
        m2mprincipal, _ := a.getm2mprincipal(ctx)
        ctxm2m := extlib.setprincipal(ctx, m2mprincipal)
        return s(ctxm2m, arg)
    }
}

func (a adminapi) update(ctx context.context, req *reqtype) (resptype, error) {}

해결 방법

귀하가 겪고 있는 오류는 설명이 필요하다고 생각합니다.

으아악

지금 전화하세요

으아악

들어옵니다s.adminapi.update 作为参数,预计类型为 toadminctx. 이 유형에 대한 정의는 다음과 같습니다.

으아악

그러나 update 函数的第二个参数是 *reqtype,其第一个返回值是 resptype 值,因此 update 不是 toadminctxtoadminctx 函数类型是可以使用上下文和字面上的任何类型调用的函数。您的 update 函数不能保证在 toadminctx 함수의 두 번째 매개변수는 *reqtype이고 첫 번째 반환 값은 resptype 값이므로

toadminctx가 아닙니다. toadminctx 함수 유형은 컨텍스트와 문자 그대로 모든 유형을 사용하여 호출할 수 있는 함수입니다.

기능은 toadminctx 기능이 가능한 모든 경우에 작동이 보장되지 않습니다. ctx

당신이 찾고 있는 것은 모든 함수를 "래핑"하고

매개변수에 일부 작업을 추가(아마도 일부 값 설정)한 다음 호출을 전달하는 방법입니다. Go 1.19 이전에는 다음과 같은 일종의 래퍼 유형을 추가하여 이를 수행했습니다. update 으아악

래퍼 인수 유형을 사용하도록

함수와 같은 모든 관련 함수를 변경합니다.

으아악

응답 유형은 비슷하게 래핑되거나 결합됩니다. adminm2msetter

이제 go는 제네릭을 지원하며 이 경우 매우 유용합니다.

함수를 다음과 같이 변경해 보겠습니다. update 으아악

이렇게 하면 이 함수를 한 번만 정의하면 되며 대신 컴파일러를 사용하여 필요한 모든 유형에 맞는 맞춤형 함수를 생성합니다.

기능의 경우 다음을 수행합니다. update 函数使用的特定类型替换通用 tr 类型。因为我真的不知道你想以这种方式包装什么函数,所以我使用了 t any, r any 으아악

기본적으로 일반 tr 유형을

함수에서 사용하는 특정 유형으로 대체합니다. 이 방법으로 어떤 함수를 래핑하려는지 잘 모르기 때문에 t any, r any를 사용했지만, 내가 보기엔 당신이 일종의 요청 핸들러를 래핑하려고 하는 것 같기 때문에 자신만의 제약 조건을 만들 수 있습니다: [t any, r any] 替换为 [t requests, r responses] 으아악

추가하세요 🎜🎜

위 내용은 Golang 데코레이터 함수에는 어떤 매개변수가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제