>백엔드 개발 >Golang >Go에서 메소드 매개변수 이름을 어떻게 검색할 수 있나요?

Go에서 메소드 매개변수 이름을 어떻게 검색할 수 있나요?

DDD
DDD원래의
2024-12-26 13:19:13458검색

How Can I Retrieve Method Parameter Names in Go?

Go에서 메소드 매개변수 이름 검색

Go에서는 메소드 매개변수 이름에 액세스하는 것이 어려울 수 있습니다. 다른 많은 언어와 달리 Go는 함수 또는 메서드 유형 자체에 매개변수 이름을 저장하지 않습니다.

다음 방법을 고려하세요.

func (t *T) TMethod(data *testData) (interface{}, *error) {
    ...
}

리플렉션을 사용하여 매개변수 데이터의 이름을 얻으려면, 다음을 시도할 수 있습니다.

reflect.ValueOf(T).MethodByName("TMethod").Type.In(0).Elem().Name()

그러나 이렇게 하면 데이터 유형 이름인 testData가 반환됩니다. 이러한 동작의 이유는 Go 함수의 고유한 특성 때문입니다.

매개변수 이름이 저장되지 않는 이유

Go에서는 함수 유형이 입력만을 나타냅니다. 및 출력 유형. 매개변수 이름은 함수가 호출되거나 실행되는 방식과 관련이 없으므로 중요하지 않은 정보로 간주됩니다. 이는 언어의 유형 시스템을 단순화합니다.

다음 사항을 고려하십시오.

  • 매개변수와 결과 유형이 동일한 두 함수는 매개변수에 관계없이 동일한 함수 유형을 가집니다. names.
  • 매개변수에는 이름이 지정되지 않을 수 있습니다(예: func foo(int, 문자열)), 해당 이름을 관련성이 없게 만듭니다.

가능한 대안

매개변수 이름은 리플렉션을 통해 검색할 수 없으므로 다음 대안을 고려하십시오.

  • 구조체 사용: 구조체는 명명된 필드를 허용합니다. 리플렉션(예: Reflect.Type.FieldByName)을 사용하여 수신 매개변수를 구조체 필드에 매핑할 수 있습니다.
  • 맵 사용: 맵은 수신 매개변수를 명명된 값에 매핑하는 데 적합합니다.

Go는 자세한 매개변수 정보보다 유형 안전성과 단순성을 우선시한다는 점을 기억하세요.

위 내용은 Go에서 메소드 매개변수 이름을 어떻게 검색할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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