My Go 파서가 구조체 유형에 대한 문서 주석을 감지하지 못하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-07 19:32:02
원래의
1030명이 탐색했습니다.

Why is My Go Parser Not Detecting Doc Comments on Struct Types?

Go 파서가 구조체 유형에 대한 문서 주석을 감지하지 못함

Go에서 구조체 유형에 연결된 문서 주석을 식별하는 방법은 다음과 같습니다. 파서 및 ast 패키지. 다음은 이러한 주석이 감지되지 않는 이유에 대한 조사입니다.

문제

질문에 제공된 소스 코드는 다음을 사용하여 구조체 유형에 대한 Doc 주석을 검색하려는 시도를 보여줍니다. Go의 파서 패키지. 그러나 구조체 유형 FirstType 및 SecondType에 대한 Doc 주석이 출력에서 ​​누락되었습니다.

해결책

이 문제를 해결하려면 Go가 문서를 처리하는 방법을 고려해야 합니다. 추상 구문 트리(AST)에 있습니다. go/doc 패키지에서는 TypeSpec에 첨부된 문서가 없는 경우 상위 GenDecl의 문서를 대신 사용해야 한다고 제안합니다.

GenDecls 검사

*ast.GenDecl에 대한 대소문자를 포함하는 질문의 코드:

for _, f := range d {
    ast.Inspect(f, func(n ast.Node) bool {
        switch x := n.(type) {
        case *ast.FuncDecl:
            fmt.Printf("%s:\tFuncDecl %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc)
        case *ast.TypeSpec:
            fmt.Printf("%s:\tTypeSpec %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc)
        case *ast.Field:
            fmt.Printf("%s:\tField %s\t%s\n", fset.Position(n.Pos()), x.Names, x.Doc)
        case *ast.GenDecl:
            fmt.Printf("%s:\tGenDecl %s\n", fset.Position(n.Pos()), x.Doc)
        }

        return true
    })
}
로그인 후 복사

이 코드를 실행하면 FirstType 및 SecondType에 대한 누락된 Doc 주석이 생성됩니다.

예기치 않은 동작

이 방법은 누락된 Doc 주석을 찾아내는 동시에 GenDecl에 대한 문서가 의도치 않게 포함되었음을 드러냅니다. 이는 AST가 구조체 유형 정의를 괄호로 묶은 유형 정의 버전의 축소로 간주하여 그룹화에 관계없이 모든 정의를 유사하게 처리하기 때문입니다.

결론

문서를 효과적으로 검색하려면 순수 AST를 사용하는 구조체 유형에 대한 주석에서는 이 동작을 인정하는 것이 중요합니다. 그러나 go/doc 패키지를 사용하는 것은 이러한 복잡성을 피하고 Go에서 문서 구문 분석을 위한 포괄적인 솔루션을 제공하므로 여전히 선호되는 접근 방식입니다.

위 내용은 My Go 파서가 구조체 유형에 대한 문서 주석을 감지하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿