> 백엔드 개발 > Golang > 구문 분석된 Go 템플릿에서 템플릿 필드 이름을 추출하는 방법은 무엇입니까?

구문 분석된 Go 템플릿에서 템플릿 필드 이름을 추출하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-18 21:43:18
원래의
937명이 탐색했습니다.

How to Extract Template Field Names from a Parsed Go Template?

파싱된 템플릿에서 템플릿 작업 목록 검색

템플릿에 정의된 템플릿을 문자열 조각으로 추출하려면 어떻게 해야 합니까? 다음과 같은 템플릿을 고려해보세요.

<h1>{{ .name }} {{ .age }}</h1>
로그인 후 복사

[]string{"name", "age"}를 얻고 싶습니다.

파싱된 템플릿 트리 검사

파싱된 템플릿은 템플릿 구조에 대한 세부정보가 포함된 템플릿 트리로 표현됩니다. 이 트리의 각 노드에는 해당 유형에 대한 정보를 제공하는 Node.Type() 메서드가 있습니다. 관련 유형은 다음과 같습니다.

  • NodeAction: 필드 평가와 같은 비제어 작업
  • NodeField: 필드 또는 메서드 이름

트리 반복

템플릿 내에서 작업을 식별하려면 다음을 수행하세요. 트리를 반복하고 노드를 탐색합니다. 다음 샘플 함수는 이 프로세스를 보여줍니다.

import (
    "text/template/parse"
)

func ListTemplFields(t *template.Template) []string {
    return listNodeFields(t.Tree.Root, nil)
}

func listNodeFields(node parse.Node, res []string) []string {
    if node.Type() == parse.NodeAction {
        res = append(res, node.String())
    }

    if ln, ok := node.(*parse.ListNode); ok {
        for _, n := range ln.Nodes {
            res = listNodeFields(n, res)
        }
    }
    return res
}
로그인 후 복사

사용 예

템플릿에 필요한 필드를 결정하려면:

t := template.Must(template.New("cooltemplate").
    Parse(`<h1>{{ .name }} {{ .age }}</h1>`))
fmt.Println(ListTemplFields(t))
로그인 후 복사

출력은 be:

[{{.name}} {{.age}}]
로그인 후 복사

참고: 이 데모는 포괄적이지 않으며 모든 경우를 처리하지 못할 수도 있습니다. 다만, 파싱된 템플릿 트리를 성찰하여 템플릿 액션을 추출하는 개념을 보여주고 있습니다.

위 내용은 구문 분석된 Go 템플릿에서 템플릿 필드 이름을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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