을 템플릿에 Title
그게 템플릿에서 어떻게 끝날까요? Template.Execute()
에 대한 인수로 전달합니다. 이것은 (당연히) 올해에도 잘 작동합니다.
이 기능을 등록하는 것보다 더 쉽고 간편합니다.
t := template.Must(template.New("").Parse(
"<html><body>{{ .Title }}; Year: {{.Year}}</body></html>"))
myObject := struct {
Title string
Year int
}{"Test Title", time.Now().UTC().Year()}
if err := t.Execute(os.Stdout, myObject); err != nil {
fmt.Println(err)
}
출력합니다 (Go Playground에 그것을 시도) :
<html><body>Test Title; Year: 2009</body></html>
(참고 : 이것은처럼 보일 수있는 방법입니다 이동 놀이터에 현재 날짜/시간이 2009-11-10 23:00:00
, 당신이 볼 그 이유는 2009
).
디자인 철학에 따라 템플릿에는 복잡한 논리가 포함되어서는 안됩니다. 템플릿에서 무언가 (또는 보이는) 것이 너무 복잡하면 Go 코드에서 결과를 계산하고 결과를 데이터로 전달하거나 템플릿에 콜백 함수를 등록하고 템플릿 함수에서 해당 함수를 호출하고 삽입해야합니다 반환 값
아마도 현재 연도를 얻는 것은 복잡한 논리가 아닙니다. 그러나 Go는 정적으로 연결된 언어입니다. 실행 가능 바이너리에는 Go (소스) 코드가 명시 적으로 참조하는 패키지와 함수 만 포함됩니다. 표준 라이브러리의 모든 패키지에 적용됩니다 (runtime
패키지 제외). 따라서 템플릿 텍스트는 time
패키지와 같은 패키지의 함수를 참조하고 호출 할 수 없습니다. 런타임에 사용할 수 있다는 보장이 없기 때문입니다.
myYou 개체에 CurrentYear 필드를 추가하고 템플릿에 {{.CurrentYear}}을 사용하면 어떤 문제가 있습니까? –