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

구문 분석된 Go 템플릿에서 작업 목록을 추출하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-16 12:12:11
원래의
581명이 탐색했습니다.

How to Extract Action Lists from a Parsed Go Template?

파싱된 템플릿에서 작업 목록 가져오기

질문:

검색하는 방법 템플릿 작업 목록(예: {{ .blahblah }}에서 정의한 작업) 구문 분석된 템플릿?

머리말:

언급한 대로 Template.Tree 필드는 템플릿 실행 시 입력 제공에 의존해서는 안 됩니다. 템플릿과 예상 데이터를 미리 정의하는 것이 중요합니다.

해결책:

파싱된 템플릿을 검사하려면 해당 구문 분석 트리(template.Template.Tree)를 탐색하세요. . 이 트리 내의 노드는 템플릿 작업을 포함한 다양한 요소를 나타냅니다. 여기서는pars.NodeAction(필드로 평가된 작업) 유형의 노드에 중점을 둡니다.

코드 예:

다음 코드는 구문 분석 트리를 재귀적으로 탐색하여 노드를 식별합니다. NodeAction을 사용하여 유형:

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
}
로그인 후 복사

사용법:

구문 분석된 템플릿에서 ListTemplFields 함수를 호출하여 작업 목록을 검색합니다. 토큰:

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

출력:

제공된 템플릿의 출력은 다음과 같습니다.

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

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

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