[go] go 언어의 text/template/exec 패키지를 사용하여 템플릿 오류 핸들링 방법

go 언어의 text/template 패키지는 텍스트 템플릿을 해석하고 실행하기 위한 기능을 제공합니다. 템플릿 실행 중 발생하는 오류를 적절히 처리하는 방법은 중요합니다. 이번 글에서는 text/template 패키지를 사용하여 템플릿 오류를 핸들링하는 방법에 대해 알아보겠습니다.

1. 템플릿 실행과 오류 핸들링

go의 text/template 패키지는 Execute 함수를 사용하여 템플릿을 실행합니다. 만약 템플릿 실행 중 오류가 발생하면 이를 적절히 핸들링해야 합니다.

오류 핸들링을 위해 Execute 함수의 반환값 중 오류를 확인하고, 필요한 경우 이를 처리할 수 있습니다. 예를 들어, 다음과 같이 Execute 함수의 반환값에서 오류를 확인하고 처리할 수 있습니다.


output := new(bytes.Buffer)
tmpl, err := template.New("test").Parse("{{.Name}}")
if err != nil {
    // 오류 처리
}
err = tmpl.Execute(output, data)
if err != nil {
    // 오류 처리
}

2. 템플릿 실행 시 오류 발생 시점의 정보

템플릿 실행 중 발생한 오류에 대한 정보를 얻기 위해서 text/template 패키지의 Template.Execute 메서드를 호출한 후, 반환된 오류 객체를 통해 오류 발생 지점과 관련된 정보를 확인할 수 있습니다.


output := new(bytes.Buffer)
tmpl, err := template.New("test").Parse("{{.Name}}")
if err != nil {
    // 오류 처리
}
err = tmpl.Execute(output, data)
if err != nil {
    // 오류 처리
    errMsg := err.Error() // 오류 메시지
    // 오류 발생 지점 등의 정보 확인
}

3. Recover 메서드 활용

때로는 템플릿 실행 시 발생한 패닉을 손쉽게 핸들링하기 위해 text/template 패키지의 Template 객체에 Recover 메서드를 등록할 수 있습니다. 이를 통해 패닉을 복구하고 오류를 처리할 수 있습니다.

tmpl := template.New("test")
tmpl = tmpl.Funcs(template.FuncMap{
    "recover": func() error {
        if r := recover(); r != nil {
            err, ok := r.(error)
            if !ok {
                err = fmt.Errorf("%v", r)
            }
            return err
        }
        return nil
    },
})

// 템플릿 실행
err := tmpl.Execute(output, data)
if err != nil {
    // 오류 처리
}

결론

go 언어의 text/template 패키지를 사용하여 템플릿 실행 중 발생한 오류를 적절히 핸들링하는 방법을 살펴보았습니다. 이를 통해 안정적이고 신뢰할 수 있는 템플릿 처리 코드를 작성할 수 있습니다.