> 백엔드 개발 > Golang > 구문 분석된 Go 템플릿에서 프로그래밍 방식으로 필드 작업을 추출하는 방법은 무엇입니까?

구문 분석된 Go 템플릿에서 프로그래밍 방식으로 필드 작업을 추출하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-18 11:46:10
원래의
809명이 탐색했습니다.

How to Programmatically Extract Field Actions from Parsed Go Templates?

파싱된 템플릿에서 템플릿 필드 추출 이해

소개:

프로그래밍 방식으로 목록 검색 구문 분석된 Go 템플릿에 정의된 템플릿 작업은 특정 시나리오에서 일반적인 작업입니다. 이 기사에서는 Template.Tree 필드를 사용하여 이를 수행하는 기술을 살펴봅니다.

파싱된 템플릿 검사

템플릿의 구문 분석된 표현은 Template.Tree에 저장됩니다. 필드는 구문 분석 트리 인스턴스로 액세스 가능합니다. 이 트리에는 작업, 텍스트 및 제어 구조를 포함한 템플릿의 모든 구성 요소가 포함되어 있습니다.

템플릿 작업 식별

필드 평가 및 함수 호출과 같은 템플릿 작업 는 parse.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
}
로그인 후 복사

예 사용법

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

출력

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

주의사항:

이 기술은 일반적으로 추출을 허용하지만 템플릿의 필드 작업에는 제한이 있습니다. 예를 들어 모든 제어 구조와 복잡한 템플릿 구문을 처리하지는 않습니다. 이는 기본 개념을 보여주기 위한 것이므로 그에 맞게 조정해야 합니다.

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

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