scanner
는 스캐너와 인코딩된 UTF-8 텍스트에 대한 토큰나이저를 제공한다.
소스를 제공하는 io.Reader 가 필요하며 Scan 함수에 대한 반복 호출을 통해 토큰화할 수 있다.
기존 도구와 호환성을 위해서 NUL 문자는 허용되지 않는다.
소스의 첫 번째 문자가 UTF-8 로 인코딩된 BOM(바이트 순서 표시) 이면 삭제된다.
기본적으로 Scanner 는 공백과 GO 주석을 건너뛰고 GO 언어 사양에 정의 된대로 모든 리터럴을 인식한다. 이런 리터럴의 하위 집합만 인식하고 다른 식별자와 공백 문자를 인식하도록 사용자가 직접 지정할 수 있다.
토큰 인식을 제어하기위한 사전 정의된 비트(GO 식별자, 정수 등)만 인식하도록 주석을 건너 뛰도록 Scanner 를 구성하려면 Scanner 의 Mode 필드를 다음과 같이 설정한다.
ScanIdents | ScanInts | SkipComments
SkipComments
가 설정된 경우 건너 뛰는 주석을 제외하고 인식할 수 없는 토큰은 무시되지 않는다. 대신 각 개별 문자를 반환한다.
예로 ScanIdents 모드일 때 foo
는 토큰 시퀀스 Idents
로 스캔된다.
const (
ScanIdents = 1 << -Ident
ScanInts = 1 << -Int
ScanFloats = 1 << -Float // 16진 부동 소수점 및 Ints 포함
ScanChars = 1 << -Char
ScanStrings = 1 << -String
ScanRawStrings = 1 << -RawString
ScanComments = 1 << -Comment
SkipComments = 1 << -skipComment // 주석이 공백으로 됨
GoTokens = ScanIdents | ScanFloats | ScanChars | ScanStrings | ScanRawStrings | ScanComments | SkipComments
)
Scan 결과는 이런 토큰 중 하나 또는 유니코드 문자이다.
const (
EOF = -(iota + 1)
Ident
Int
Float
Char
String
RawString
Comment
)
GO 공백은 스캐너의 공백 필드에 대한 기본값이다.
이 값은 GO 의 주석 문자를 선택한다.
const GoWhitespace = 1<<'\t' | 1<<'\n' | 1<<'\r' | 1<<' '
func TokenString(tok rune) string
토큰이나 유니코드 문자에 대한 출력 가능한 문자열을 반환한다.
type Position struct {
Filename string // 파일이름 (있을 경우)
Offset int // b 부터 시작하는 byte offset
Line int // 1 부터 시작하는 line number
Column int // 1부터 시작하는 column number(해당 문자 수)
}
Position 은 위치 값으로 표시된다.
Line > 0
이면 위치가 유효하다.
func (pos *Position) IsValid() bool
포지션이 유효한지 아닌지 여부를 반환한다.
type Scanner struct {
// 에러는 각각의 발생한 에러에 대해 호출된다.
// 에러 함수가 설정되지 않으면, 에러는 os.Stderr 가 반환된다.
Error func(s *Scanner, msg string)
// 각각의 발생된 함수에 대해 1씩 증가한다.
ErrorCount int
// 모드는 인식되는 토큰을 제어한다.
// 예를 들어 Int 를 인식하면, ScanInts 비트를 설정한다.
// 필드는 언제든 변경할 될 수 있다.
Mode uint
// Whitespane 는 공백처럼 인식된 문자를 제어한다.
// 공백과 같은 ch <= ' ' 문자를 인식하기 위해, Whitespan 에서 ch'th 비트를 설정한다.
// (Scanner 의 동작에는 ch > ' ' 값이 정의되어 있지 않다.)
// 이 필드는 언제든 변경할 수 있다.
Whitespace uint64
// IsIdentRune 은 식별자에서 i 번째 룬으로 허용되는 문자를 제어하는 술어이다.
// 유효한 문자의 집합은 공백 문자의 집합과 교차해서는 안된다.
// IsIdentRune 함수가 설정되있지 않으면 일반 GO 식별자가 대신 허용된다.
// 이 필드는 언제든 교체될 수 있다.
IsIdentRune func(ch rune, i int) bool // Go 1.4
// 가장 최근에 스캔된 토큰의 시작 위치; 스캔에 의해 설정된다.
// Init 도는 Next 를 호출하면 위치가 무효화된다. (Line == 0)
// 파일 이름은 항상 스캐너에 의해 변경되지 않는다.
// 오류가 반환되고 오류를 통해 위치가 유효하지 않은 경우
// 스캐너가 토큰 내부에 있지 않는다.
// Pos 를 호출하여 오류 위치를 얻거나 가장 최근에 스캔한 토큰 직후 위치를 얻는다.
Position
}
io.Reader 에서의 토큰과 유니코드 문자의 읽기를 구현한다.
func (s *Scanner) Init(src io.Reader) *Scanner
새로운 소스로 Scanner 를 호출하고 s
를 반환한다.
Error 는 nil 로, ErrorCount 는 0 으로, Mode 는 GoTokens 로, Whitespace 는 GoWhitespace 로 설정한다.
func (s *Scanner) Next() rune
다음 유니코드 문자를 읽고 반환한다.
소스 끝에 EOF 를 반환한다.
nil 이 아닌 경우 s.Error 를 호출하여 읽기 오류를 보고한다. 그렇지 않으면 os.Stderr 에 오류 메시지를 인쇄한다.
다음은 스캐너의 위치 필드를 업데이트하지 않는다. Pos() 를 이용하여 최근 위치를 얻는다.
func (s *Scanner) Peek() rune
스캐너 진행 없이 소스의 다음 유니코드 문자를 반환한다.
스캐너의 위치가 소스 마지막 문자에 있으면 EOF를 반환한다.
func (s *Scanner) Pos() (pos Position)
Next 또는 Scan 에 대한 마지막 호출에서 반환된 문자 또는 토큰 바로 뒤의 문자 위치를 반환한다.
가장 최근에 스캔한 토큰의 시작 위치로 스캐너의 위치 필드를 사용한다.
func (s *Scanner) Scan() rune
소스에서 다음 토큰 또는 유니 코드 문자를 읽고 반환한다.
각 모드 비트 (1 << -t) 가 설정된 토큰 t
만 인식 한다.
소스 끝에 EOF 를 반환한다. nil 이 아닌 경우 s.Error
를 호출하여 스캐너 오류를 보고한다. 그렇지 않으면 os.Stderr 에 오류 메시지를 인쇄한다.
func (s *Scanner) TokenText() string
가장 최근에 스캔한 토큰에 해당하는 문자열을 반환한다.
Scan 호출 후 Scanner.Error 호출 시 유효하다.
tabwriter
는 입력의 탭 열을 올바르게 정렬된 텍스트로 변환하는 쓰기 필터 (tabwriter.Writer) 를 구현한다.
해당 패키지는 Elastic Tabstops 알고리즘을 사용하고 있다.
이러한 플래그를 사용하여 형식을 제어할 수 있다.
const (
// html 태그를 무시하고 엔티티 ('&' 로 시작하고 ';' 로 끝나는
// 단일 문자로 취급한다.
FilterHTML uint = 1 << iota
// 스트립 이스케이프 문자는 텍스트와 함께 변경하지 않고
// 이스케이프된 텍스트 세그먼트를 괄호로 묶는다.
StripEscape
// 셀 내용물의 오른쪽 정렬을 수행한다.
// 기본 값은 왼쪽 정렬이다.
AlignRight
// 빈 열은 처음에 입력이 없는 것처럼 처리한다.
DiscardEmptyColumns
// 들여쓴 컬럼에 대해 항상 탭을 사용한다.
TabIndent
// 컬럼 사이에 (|) 을 출력한다.
Debug
)
텍스트 세그먼트를 이스케이프하려면 이스케이프 문자로 괄호를 사용해야한다.
0xff
값은 유효한 UTF-8 시퀀스에 나타날 수 없기 때문에 선택되었다.
const Escape = '\xff'
type Writer struct {
// 필터링되거나 내보내지지 않은 필드 포함
}
Writer
는 입력에서 탭으로 구분된 열 주위에 패딩을 삽입하여 출력에서 정렬하는 필터다.
들어오는 바이트를 가로 \t
또는 세로 \v
탭으로 끝나는 셀과 줄바꿈 \n
또는 폼 피트 \f
로 구성된 UTF-8 인코딩된 텍스트로 처리한다.
연속된 줄의 탭으로 끝나는 셀은 열을 구성한다.
열의 모든 셀이 동일한 너비를 갖도록 필요에 따라 패딩을 삽입하여 열을 효과적으로 정렬한다. 탭 너비를 지정해야하는 탭을 제외하고 모든 문자의 너비가 같다고 가정한다.
열 셀은 탭으로 구분되지 않고 탭으로 끝나야 한다.
행 끝의 탭으로 끝나지 않은 후행 텍스트는 셀을 형성하지만 해당 셀은 정렬된 열의 일부가 아니다.
텍스트 세그먼트는 이스케이스 문자로 괄호로 묶어 이스케이프 할 수 있다.
폼 피드 문자는 개행 문자처럼 작동하지만 현재 행의 모든 열을 종료한다.
한 줄의 적절한 간격은 이후 줄의 셀에 따라 달라질 수 있으니 Writer 는 내부적으로 입력을 버퍼링해야 한다.
func NewWriter(output io.Writer, minwidth,
tabwidth, padding int, padchar byte, flags uint) *Writer
새 tabwriter.Writer 를 할당하고 초기화한다.
매개 변수는 Init 함수와 동일하다.
func (b *Writer) Flush() error
버퍼링된 모든 데이터가 출력에 디록되도록 하려면 Write 에 대한 마지막 호출 후 Flush 를 호출해야 한다. 끝의 불완전한 이스케이프 시퀀스는 형식화 목적으로 완전한 것으로 간주한다.
func (b *Writer) Init(output io.Writer, minwidth,
tabwidth, padding int, padchar byte, flags uint) *Writer
Writer 는 Init 에 대한 호출로 초기화되어야 한다.
첫 번째 매개변수는 필터 출력을 지정한다.
나머지 매개변수는 형식을 제어한다.
minwidth 최소 셀 너비를 포함한 패딩 탭
tabwidth 탭 문자의 너비
padding padding added to a cell before computing its width
padchar 패드가 '\t'인 경우 패딩에 사용되는 ASCII 문자,
기록자는 형식화된 출력에서 '\t'의 너비가 탭 너비이고
셀은 align_left와 독립적으로 좌회전이라고 가정한다.
flags 서식 제어
func (b *Writer) Write(buf []byte) (int, error)
쓰기는 작성자에게 buf 를 쓴다.
반환되는 유일한 오류는 기본 출력에 쓰는 동안 발생한 오류이다.
텍스트 출력을 생성하기위한 데이터 기반 템플릿을 구현한다.
HTML 출력을 생성하려면이 패키지와 동일한 인터페이스를 가지고 있지만 특정 공격에 대해 HTML 출력을 자동으로 보호하는 패키지 html / template을 하자.
템플릿은 데이터 구조에 적용하여 실행된다.. 템플릿의 주석은 실행을 제어하고 표시 할 값을 파생하기 위해 데이터 구조의 요소 (일반적으로 구조체의 필드 또는 맵의 키)를 참조한다.
템플릿을 실행하면 구조를 따라 이동하고 마침표 '.'로 표시되는 커서가 설정된다.
템플릿의 입력 텍스트는 모든 형식의 UTF-8 인코딩 텍스트이다.
외부의 모든 텍스트는 변경되지 않고 출력에 복사됩니다.
원시 문자열을 제외하고 작업은 주석이 가능하지만 줄 바꿈에 걸쳐 있지 않을 수 있다.
일단 파싱되면, 병렬 실행이 Writer를 공유하는 경우 출력이 인터리브 될 수 있지만 템플릿은 병렬로 안전하게 실행될 수 있다.
type Inventory struct {
Material string
Count uint
}
sweaters := Inventory{"wool", 17}
tmpl, err := template.New("test")
.Parse("{{.Count}} items are made of {{.Material}}")
if err != nil { panic(err) }
err = tmpl.Execute(os.Stdout, sweaters)
if err != nil { panic(err) }
위는 17 items are made of wool
를 출력하는 간단한 예이다.
이보다 더 복잡한 예는 다음에서 더 자세히 알아 볼 수 있다.
func HTMLEscape(w io.Writer, b []byte)
일반 텍스트 데이터 b
에 해당하는 이스케이프된 HTML 를 w
에 쓴다.
func HTMLEscapeString(s string) string
일반 텍스트 데이터 s
의 이스케이프된 HTML 를 반환한다.
func HTMLEscaper(args ...interface{}) string
인수의 텍스트 표현에 해당하는 이스케이프된 HTML 을 반환한다.
func IsTrue(val interface{}) (truth, ok bool)
값이 true
인지 아닌지를 반환한다.
func JSEscape(w io.Writer, b []byte)
일반 텍스트 데이터에 해당하는 이스케이프된 JavaScript 를 w
에 기록한다.
func JSEscapeString(s string) string
일반 텍스트 데이터 s
를 이스케이프된 JavaScript 로 반환한다.
func JSEscaper(args ...interface{}) string
인수의 텍스트 표현에 해당하는 이스케이프된 JavaScript 를 반환한다.
func URLQueryEscaper(args ...interface{}) string
URL 쿼리에 포함하기에 적합한 형식으로 인수의 텍스트 표현의 이스케이프된 값을 반환한다.
type ExecError struct {
Name string // 템플릿 이름
Err error // 미리 포맷된 오류
}
템플릿에 오류가 있을 때 반환되는 사용자 지정 오류 유형이다.
func (e ExecError) Error() string
func (e ExecError) Unwrap() error
type FuncMap map[string] interface{}
이름에서 함수로의 매핑을 정의하는 맵 유형이다.
각 함수에는 단일 반환값이 있거나 두 번째 반환 값에 오류가 있는 두 개의 반환 값이 있어야 한다. 이 경우 두 번째 (오류) 반환 값이 실행 중에 nil 이 아닌 것으로 평가되면 실행이 종료되고 Execute 는 해당 오류를 반환한다.
템플릿 실행이 인수 목록에 있는 함수를 호출할 때 해당 목록을 함수의 매개 변수 유형에 할당할 수 있어야 한다.
임의 유형의 인수에 적용되는 함수는 interface{} 유형 또는 reflect.Value 유형의 매개 변수를 사용할 수 있다.
마찬가지로 임의 유형의 결과를 반환하는 함수는 interface{} 또는 reflect.Value 를 반환할 수 있다.
type Template struct {
*parse.Tree
// 필터링되거나 내보내지지 않는 필드 포함
}
템플릿은 구문 분석된 템플릿의 표현이다.
*parse.Tree 필드는 html/template 에서만 사용하기 위해 내보내지며 다른 모든 클라이언트에서 내보내지 않은 것으로 처리되어야 한다.
func Must(t *Template, err error) *Template
(*Template, err) 를 반환하는 함수에 대한 호출을 래핑하고 nil 이 아닌 경우 패닉하는 도우미이다.
var t = template.Must(template.New("name").Parse("text"))
위과 같은 변수 초기화에 사용하기 위한 것이다.
func New (name string) *Template
지정된 이름으로 정의되지 않은 새 템플릿을 할당한다.
func ParseFS (fsys fs.Fs, patterns ...string) (*Template, error)
ParseFiles 또는 ParseGlob 과 비슷하지만 호스트 운영 체제의 파일 시스템 대신 파일 시스템 fsys 에서 읽는다.
glob 패턴 목록을 허용한다.
func ParseFiles (filenames ...string) (*Template error)
새 템플릿을 만들고 명명된 파일에서 템플릿 정의를 구문 분석한다.
반환된 템플릿의 이름에는 첫 번째 파일의 기본 이름과 구문 분석된 내용이 있다. 하나 이상의 파일이 있어야 한다.
오류가 발생하면 구문 분석이 중지되고 반환된 *Template 은 nil 이다.
다른 디렉토리에서 동일한 이름을 가진 여러 파일을 구문 분석할 때 마지막으로 언급된 파일이 결과가 된다.
func ParseGlob(pattern string) (*Template, error)
새 템플릿을 만들고 패턴으로 식별된 파일에서 템플릿 정의를 구문 분석한다.
파일은 filepath.Match 의 의미에 따라 일치하며 패턴은 하나 이상의 파일과 일치해야 한다.
반환된 템플릿에는 패턴과 일치하는 첫 번재 파일의 이름과 내용이 있다.
패턴과 일치하는 파일 목록을 사용하여 ParseFiles 를 호출하는 것과 같다.
다른 디렉토리에서 동일한 이름을 가진 여러 파일을 구문 분석할 때 마지막으로 언급된 파일이 결과가 된다.
func (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error)
인수 구문 분석 트리를 템플릿 t
와 연결하여 지정된 이름을 제공한다.
템플릿이 정의되지 않은 경우에 트리가 정의된다.
이미 해당 이름이 있는 경우 기존 정의가 대체된다.
그렇지 않으면 새 템플릿이 생성, 정의 및 반환된다.
func (t *Template) Clone() (*Template, error)
연관된 모든 템플릿을 포함하여 템플릿의 복제본을 반환한다.
사본에 템플릿이 추가되지만 원본에는 추가되지 않는다.
클론을 통해 공통 템플릿을 준비하고 클론이 만들어진 후 변형하며 정의하여 사용할 수 있다.
func (t *Template) DefinedTemplates() string
정의된 템플릿을 나열하는 문자열을 반환한다.
이 문자열 앞에 ""
가 붙는다. 정의된 템플릿은 "
이다.
아무것도 없으면 빈 문자열을 반환한다.
func (t *Template) Delims(left, right string) *Template
Parse, ParseFiles 또는 ParseGlob 에 대한 후속 호출에 사용할 작업 구문 기호를 지정된 문자열로 설정한다.
중첩된 템플릿 정의는 설정을 상속할 수 있다.
func (t *Template) Execute(wr io.Writer, data interface{}) error
구문 분석된 템플릿을 지정된 데이터 개체에 적용하고 출력을 wr
에 쓴다.
템플릿을 실행하거나 출력을 쓰는 중에 오류가 발생하면 실행이 중지되지만 일부 결과가 이미 출력 작성기에 기록되었을 수 있다.
병렬 실행이 Writer 를 공유하는 경우 출력이 인터리브 될 수 있지만 템플릿은 병렬로 안전히 실행될 수 있다.
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error
지정된 데이터 개체에 지정된 이름을 가진 t
와 연결된 템플릿을 적용하고 출력을 wr
에 쓴다.
템플릿을 실행하거나 출력을 쓰는 중에 오류가 발생하면 실행이 중지되지만 일부 결과가 이미 출력 작성기에 기록되었을 수도 있다.
병렬 실행이 Writer 를 공유하는 경우 출력이 인터리브될 수 있지만 템플릿을 안전히 실행될 수 있다.
func (t *Template) Funcs(funcMap FuncMap) *Template
인수 맵의 요소를 템플릿의 함수 맵에 추가한다.
템플릿을 구문 분석하기 전에 호출해야 한다.
맵의 값이 적절한 반환 유형이 있는 함수가 아니거나 이름을 템플릿의 함수로 구문으로 사용할 수 없은 경우 패닉이 발생한다.
Map 의 요소를 덮어 쓰는 것은 합법적이다.
func (t *Template) Lookup(name string) *Template
t
와 연관된 주어진 이름을 가진 템플릿을 반환한다.
그러한 템플릿이 없거나 템플릿에 정의가 없으면 nil
을 반환한다.
func (t *Template) Name() string
템플릿의 이름을 반환한다.
func (t *Template) New(name string) *Template
지정된 것과 동일한 구분 기호를 사용하여 정의되지 않은 새 템플릿을 할당한다. 전이적인 연결을 통해 하나의 템플릿이 다른 템플릿을 호출할 수 있다.
연결된 템플릿은 기본 데이터를 공유하기 때문에 템플릿 구성을 병렬로 안전하게 수행할 수 없다.
템플릿이 구성되면 병렬로 실행할 수 있다.
func (t *Template) Option(opt ...string) *Template
템플릿에 대한 옵션을 설정한다.
단순 문자열 또는 키밸루 문자열로 설명된다.
"missingkey=default" 또는 "missingkey=invalid"
기본 동작 : 아무것도하지 않고 실행을 계속한다.
인쇄 된 경우 색인 작업의 결과는 문자열
"<no value>"입니다.
"missingkey=zero"
이 작업은 Map 유형의 요소에 대해 0 값을 반환한다.
"missingkey=error"
오류와 함께 실행이 즉시 중지된다.
func (t *Template) Parse(text string) (*Template, error)
구문 분석 텍스트를 t
에 대한 템플릿 본문으로 구문 분석 한다.
Parse 에 대한 연속 호출에서 템플릿을 재정의할 수 있다.
공백과 주석만 포함된 본문이 있는 템플릿 정의는 비어있는 것으로 간주되며 기존 템플릿의 본문을 대체하지 않는다.
func (t *Template) ParseFS(fsys fs.Fs, patterns ..string) (*Template, error)
ParseFiles 또는 ParseGlob 과 비슷하지만 호스트 운영 체제의 파일 시스템 대신 파일 시스템 fsys 에서 읽는다.
func (t *Template) ParseFiles(filenames ...string) (*Template, error)
명명된 파일을 구문 분석하고 결과 템플릿을 t
와 연결한다.
오류가 발생하면 구문 분석이 중지되고 반환된 템플릿은 nil
이다.
하나 이상의 파일이 있어야한다.
func (t *Template) ParseGlob(pattern string) (*Template, error)
패턴으로 식별된 파일의 템플릿 정의를 구문 분석하고 결과 템플릿을 t
와 연결한다. 파일은 filepath.Match 의 의미에 따라 일치하며 패턴은 하나 이상의 파일과 일치해야 한다.
func (t *Template) Template() []*Template
t
와 관련된 정의된 템플릿 조각을 반환한다.
func IsEmpty(n Node) bool
트리(노드)에 공백이나 주석을 제외한 모든 것이 비어있는지 여부를 반환한다.
func Parse(name, leftElim, rightDelim string,
funcs ...map[string] interface{}) (map[string] *Tree, error)
인수 문자열에 설명된 템플릿을 구문 분석하여 만든 템플릿 이름에서 parse.Tree 로의 맵을 반환한다.
최상위 템플릿엔 지정된 이름이 지정된다.
오류가 발생하면 구문 분석이 중지되고 오류와 함께 빈 맵이 반환된다.
type ActionNode struct {
NodeType
Pos
Line int // 입력 줄 번호. 더이상 사용되지 않고 호환성을 위해 보관
Pipe *PipeNode // 작업의 파이프 라인
}
작업 (구분자로 묶인 것)을 보유한다.
제어 조치에는 자체 노드가 있고, 필드 평가 및 괄호로 묶인 파이프 라인과 같은 간단한 것을 나타낸다.
func (a *ActionNode) Copy() Node
복사 용도를 위한 함수이다.
type BoolNode struct {
NodeType
Pos
True bool // 부울 상수의 값
}
func (a *BoolNode) Copy() Node
복사 용도를 위한 함수이다.
type BranchNode struct {
NodeType
Pos
Line int // 입력 줄 번호. 더 이상 사용되지 않고 호환성을 위해 보관
Pipe *PipeNode // 파이프 라인
List *ListNode // 값이 비어있지 않은 경우 실행할 작업
ElseList *ListNode // 값이 빈 경우 실행할 작업
}
if, range
및 with
의 일반적인 표현이다.
func (b *BranchNode) Copy() Node
복사 용도를 위한 함수이다.
type ChainNode struct {
NodeType
Pos
Node Node
Field []string // 어휘 순서의 식별자
}
체인노드는 필드 엑세스 체인 (.
로 시작하는 식별자) 뒤에 오는 용여를 보유한다.
func (c *ChainNode) Add(field string)
체인 끝에 이름이 지정된 필드(마침표로 시작해야함)를 추가한다.
func (c *ChainNode) Copy() Node
복사 용도를 위한 함수이다.
type CommandNode struct {
NodeType
Pos
Args[] Node // 어휘 순서의 인수 : 식별자, 필드 또는 상수
}
명령(평가 작업 내부의 파이프라인)을 보유한다.
func (c *CommandNode) Copy() Node
복사 용도의 함수이다.
type CommentNode struct {
NodeType
Pos
text string // 주석 텍스트
}
주석을 보유한다.
func (c *CommentNode) Copy() Node
복사 용도의 함수이다.
type DotNode struct {
NodeType
Pos
}
특수 식별자 .
을 보유한다.
func (d *DotNode) Copy() Node
복사 용도의 함수이다.
type Node struct {
NodeType
Pos
Ident []string // 어휘 순서의 식별자이다.
}
필드( .
로 시작하는 식별자 )를 보유한다. 이름은 연결될 수 있다.
func (f *FieldNode) Copy() Node
복사 용도의 함수이다.
type IdentifierNode struct {
NodeType
Pos
Ident string // 식별자의 이름
}
식별자를 보유한다.
func NewIdentifier(ident string) *IdentifierNode
주어진 식별자 이름으로 새 IdentifierNode 를 반환한다.
func (i *IdentifierNode) Copy() Node
복사 용도의 함수이다.
func (i *IdentifierNode) SetPos(pos Pos) *IdentifierNode
위치를 설정한다.
func (i *IdentifierNode) SetTree(t *Tree) *IdentifierNode
노드의 부모 트리를 설정한다.
SetPos
와 SetTree
는 NewIdentifier
이 공용 메소드로서 서명을 수정할 수 없고, 편의를 위해 연결되어 있다.
type IfNode struct {
BranchNode
}
IfNode 는 {{if}} 조치 및 해당 명령을 나타낸다.
func (i *IfNode) Copy() Node
복사를 위한 용도의 함수이다.
type ListNode struct {
NodeType
Pos
Nodes []Node // 어휘 순서의 요소 노드이다.
}
일련의 노드를 보유한다.
func (l *ListNode) Copy() Node
노드를 복사하기 위한 용도의 함수이다.
func (l *ListNode) CopyList() *ListNode
리스트 노드를 복사하기 위한 함수이다.
type Mode uint
const (
ParseComments Mode = 1 << iota // 주석을 구문 분석하고 AST에 추가
)
모드 값은 플래그 집합 (또는 0) 이다. 모드는 파싱 동작을 제어한다.
type NilNode struct {
NodeType
Pos
}
형식화되지 않은 nil 상수를 나타내는 특수 식별자 nil
을 보유한다.
func (n *NilNode) Copy() Node
복사를 위한 함수이다.
type Node interface {
Type() NodeType
String() string
// Copy 는 Node 및 모든 구성 요소의 전체 복사를 수행한다.
// 타입 역설을 피하기 위해, 몇몇 xxxNodes 에는
// *xxxNode 를 반환하는 CopyxxxNode 메소드가 있다.
Copy() Node
// 전체 원본 입력 문자열에서 노드 시작의 바이트 위치
Position() Pos
}
type NodeType int
NodeText NodeType = iota // 일반 텍스트
NodeAction // 필드 평가와 같은 비제어 작업
NodeBool // 부울 상수
NodeChain // 필드 접근의 시퀀스
NodeCommand // 파이프 라인 요소
NodeDot // 커서, 도트
NodeField // 필드 또는 메소드 이름
NodeIdentifier // 식별자. 항상 함수 이름임.
NodeIf // if 작업
NodeList // 노드 리스트
NodeNil // 타입이 없는 nil 상수
NodeNumber // 숫자 상수
NodePipe // 명령 파이프 라인
NodeRange // range 작업
NodeString // string 상수
NodeTemplate // 템플릿 호출 작업
NodeVariable // 변수 $
NodeWith // with 작업
NodeComment // 주석
)
구문 분석 트리 노드의 유형을 식별한다.
func (t NodeType) Type() NodeType
Type 은 스스로를 반환하고 Node.js 에 포함하기위한 쉬운 기본 구현을 제공한다.
모든 중요치 않은 노드에 포함된다.
type NumberNode struct {
NodeType
Pos
IsInt bool // 숫자에는 정수 값이 있다.
IsUint bool // 숫자에 부호없는 정수 값이 있다.
IsFloat bool // 숫자에는 부동 소수점 값이 있다.
IsComplex bool // 숫자가 복잡하다.
Int64 int64 // 부호있는 정수 값이다.
Uint64 uint64 // 부호없는 정수 값이다.
Float64 float64 // 부동 소수점 값.
Complex128 complex128 // 복잡한 값.
텍스트 string // 입력의 원래 텍스트 표현
// 필터링되거나 내보내지지 않은 필드 포함
}
부호있거나 없는 정수, 부동 소수점 도는 복소수와 같은 숫자를 보유한다.
값은 값을 나타낼 수 있는 모든 유형 아래에서 구문 분석되고 저장한다.
이것은 GO 의 이상적인 상수의 동작을 소량의 코드로 시뮬레이션한다.
func (n *NumberNode) Copy() Node
type PipeNode struct {
NodeType
Pos
Line int // 입력의 줄.
IsAssign bool // 변수가 선언되지 않고 할당된다.
Decl [] *VariableNode // 어휘 순서의 변수
Cmds [] *CommandNode // 어휘 순서의 명령이다
// 필터링되거나 내보내지지 않은 필드 포함
}
선택적 선언이 있는 파이프 라인을 보유한다.
func (p *PipeNode) Copy() Node
노드를 복사하기 위한 함수이다.
func (p *PipeNode) CopyPipe() *PipeNode
파이프 노드를 복사하기 위한 함수이다.
type Pos int
해당하는 템플릿이 구분 분석된 원본 입력 텍스트의 바이트 위치를 나타낸다.
func (p Pos) Position() Pos
type RangeNode struct {
BranshNode
}
{{range}} 작업 및 해당 명령을 나타낸다.
func (r *RangeNode) Copy() Node
노드를 복사하기 위한 함수이다.
type StringNode struct {
NodeType
Pos
Quoted string // 인용 부호가 있는 문자열의 원본 텍스트
Text string // 따옴표 처리 후 문자열
}
문자열 상수를 보유한다. 값은 인용되지 않음 이다.
func (s *StringNode) Copy() Node
노드를 복사하기 위한 함수이다.
type TemplateNopde struct {
NodeType
Pos
Line int // 입력 줄 번호
Name string // 템플릿 이름 (따옴표 없음)
Pipe *PipeNode // 템플릿의 점으로 평가할 명령
}
func (t *TemplateNode) Copy() Node
노드를 복사하기 위한 함수이다.
type TextNode struct {
NodeType
Pos
Text []byte // 텍스트. 줄바꿈에 걸쳐있을 수도 있다.
}
일반 텍스트를 보유한다.
func (t *TextNode) Copy() Node
노드를 복사하기 위한 함수이다.
type Tree struct {
Name string // 트리를 나타내는 템플릿 이름
ParseName string // 오류 메시지에 대한 구문 분석 중
// 최상위 템플릿 이름
Root *ListNode // 트리의 최상위 루트
Mode Mode // 구문 분석 모드
}
구문 분석된 단일 템플릿의 표현이다.
func New(name string, funcs ...map[string]interface{}) *Tree
주어진 이름으로 새 구문 분석 트리를 할당한다.
func (t *Tree) Copy() *Tree
Tree 의 복사본을 반환한다.
모든 구문 분석 상태가 삭제된다.
func (t *Tree) ErrorContext(n Node) (location, context string)
입력 텍스트에서 노드 위치의 텍스트 표현을 반환한다.
수신자는 노드에 내부 트리에 대한 포인터가 없을 때만 사용되며, 이는 이전 코드에서 발생할 수 있다.
func(t *Tree) Parse(text, leftDelim, rightDelim string,
treeSet map[string]*Tree, funcs ...map[string]interface{})
(tree *Tree, err error)
템플릿 정의 문자열을 구문 분석하여 실행할 템플릿의 표현을 구성한다.
조치 구분 기호 문자열이 비어 있으면 기본값 ( {{
또는 }}
)이 사용된다.
포함된 템플릿 정의가 treeSet 맵에 추가된다.
type VariableNode struct {
NodeType
Pos
Ident []string // 변수 이름과 어휘 순서의 필드
}
가능한 체인 필드 접근과 함께 변수 이름 목록을 보유한다.
달러 기호는 이름의 일부이다.
func (v *VariableNode) Copy() Node
노드를 복사하기 위한 함수이다.
type WithNode struct {
BranchNode
}
{{with}}
작업 및 해당 명령을 나타낸다.
func (w *WithNode) Copy() Node
노드를 복사하기 위한 함수이다.