>백엔드 개발 >Golang >Go 함수의 서명을 문자열로 어떻게 검색할 수 있나요?

Go 함수의 서명을 문자열로 어떻게 검색할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-11-23 00:12:341049검색

How Can I Retrieve a Go Function's Signature as a String?

Go에서 함수의 서명을 문자열로 검색

Go에서 특정 이름과 서명이 있는 함수의 서명을 결정합니다. 메인 패키지는 다음과 같은 경우에 유익한 오류 메시지를 제공하는 데 중요합니다. 불일치.

reflect.Type.String()이 서명을 검색할 수 있습니까?

reflect.Type.String()이 유형 이름(예: main.ModuleInitFunc)을 제공하는 동안 , 전체 서명을 제공하는 데 부족합니다. 이는 명명된 유형이 있는 함수 값을 처리할 때 특히 분명합니다.

서명 구성

서명을 구성하려면 Reflect.Type에서 수동으로 정보를 수집해야 합니다. .

  • Type.In()은 i번째 유형을 제공합니다. 매개변수.
  • Type.Out()은 i번째 결과 유형의 유형을 제공합니다.

구현 예

아래는 함수의 시그니처를 생성하는 예제 함수입니다. value:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}

이 함수는 입력 및 출력 유형을 반복하고 이를 사람이 읽을 수 있는 문자열로 조합하여 서명을 구성합니다.

서명 함수 테스트

서명 기능을 테스트하면 다음과 같은 결과가 나옵니다. 결과:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>

Go에서는 매개변수 및 결과 유형 이름에 대한 액세스를 제공하지 않으므로 서명에서 생략된다는 점에 유의하는 것이 중요합니다.

위 내용은 Go 함수의 서명을 문자열로 어떻게 검색할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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