Go에서 함수의 서명을 문자열로 검색
Go에서 특정 이름과 서명이 있는 함수의 서명을 결정합니다. 메인 패키지는 다음과 같은 경우에 유익한 오류 메시지를 제공하는 데 중요합니다. 불일치.
reflect.Type.String()이 서명을 검색할 수 있습니까?
reflect.Type.String()이 유형 이름(예: main.ModuleInitFunc)을 제공하는 동안 , 전체 서명을 제공하는 데 부족합니다. 이는 명명된 유형이 있는 함수 값을 처리할 때 특히 분명합니다.
서명 구성
서명을 구성하려면 Reflect.Type에서 수동으로 정보를 수집해야 합니다. .
구현 예
아래는 함수의 시그니처를 생성하는 예제 함수입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!