2016-10-09 1 views
4

:조건에 의한 개행을 피하는 방법은 무엇입니까? 이 이동 텍스트/템플릿 코드 감안할 때

Let's say: 
{{ if eq .Foo "foo" }} 
Hello, StackOverflow! 
{{ else if eq .Foo "bar" }} 
Hello, World! 
{{ end }} 

우리의 경우 Foo에서 다음과 같은 출력이 "foo"에 해당 얻을 :

Let's say: 

Hello, StackOverflow! 

있는 방법에 있는가 (줄 바꿈 다음) 여분의 줄 바꿈을 제거 하시겠습니까?

나는 이것이 {{--}} 구문을 사용하여 수행 할 수 있다는 기대는 :

Let's say: 
{{- if eq .Foo "foo" }} 
Hello, StackOverflow! 
{{- else if eq .Foo "bar" }} 
Hello, World! 
{{- end }} 

그러나,은 illegal number syntax: "-" 오류를 얻을 수 있습니다.

+2

오류가 발생 했습니까? [playground] (https://play.golang.org/p/iNaEYCMn2D)에 템플릿을 복사하여 붙여 넣으면 예상대로 작동합니다.아마도'-'와'syntax' 사이에'space '를 넣는 것을 잊었을 것입니다. – putu

+3

어쩌면 가서 버전이 너무 오래 되었습니까? 지금까지 내가 기억하는 한 새로운 기능입니다. – svenwltr

+1

@SvenWalter 당신이 맞습니다, 그것은 [1.6 이후로] 소개되었습니다 (https://golang.org/doc/go1.6#template) – putu

답변

1

당신의 첫 번째 템플릿에는 정적 텍스트 "Let's say:" 다음에 줄 바꿈이 있고 두 번째 줄에는 {{if}} 동작 만 포함되어 있고 줄 바꿈도 포함되어 있으며 그 본문 "Hello, StackOverflow!"은 세 번째 줄에서 시작됩니다. 이것이 렌더링되면 2 개의 정적 텍스트 사이에 2 개의 개행 문자가 표시되므로 게시 할 때 빈 줄이 표시됩니다.

첫 번째 줄 바꿈 없애 {{- if...를 사용할 수 있으므로 렌더링 할 때, 단 1 줄 바꿈은 2 개 개의 다른 라인의 결과로, 출력에 도달하지만, 그들 사이에 줄 바꿈 : Foo

Let's say: 
{{- if eq .Foo "foo" }} 
Hello, StackOverflow! 
{{- else if eq .Foo "bar" }} 
Hello, World! 
{{- end }} 

출력되지 않습니다

"foo" :

: Foo"bar"입니다

Let's say: 
Hello, StackOverflow! 

출력

Go Playground에서 사용해보십시오.

이 내용은 Go 1.6: Template에 추가되었으며 text/template: Text and Spaces에 기록되어 있습니다. 당신이 행동 -}}의 폐쇄에 - 기호를 사용하는 경우

, 모든 줄 바꿈을 제거도 할 수 있습니다

Let's say: 
{{- if eq .Foo "foo" -}} 
Hello, StackOverflow! 
{{- else if eq .Foo "bar" -}} 
Hello, World! 
{{- end -}} 

출력 Foo"foo"Foo"bar" 인 경우 :

Let's say:Hello, StackOverflow! 
Let's say:Hello, World! 

Go Playground에서 시도해보십시오.

+0

Go 1.6 이후로이 문제를 해결할 것으로 예상되는대로 답변을 수락하겠습니다. +1 또한 변형을 설명합니다. 필자의 경우, 문제는 일반적으로 발생하지 않아야하는 이전 Go 버전이었습니다. – tmh

0

당신은 콜론 이후 새로운 라인을 (:)

이 난 그냥 처음 경우 바로 첫 번째 콜론 이후에 시작 https://play.golang.org/p/k4lazGhE-r 주를 작동 추가하고 있기 때문에 새로운 라인이있다

에서
+0

기술적으로이 해결 방법은 정확합니다. 그러나 가독성을 높이기 위해 템플릿에 줄 바꿈을 유지하고 싶습니다. – tmh

관련 문제