Go 템플릿 범위에서 마지막 항목을 검색하는 방법은 무엇입니까?
Nov 08, 2024 am 06:24 AM템플릿 범위의 마지막 항목 감지
Go 템플릿에서 범위 작업을 사용하여 배열이나 슬라이스를 반복하면 다음에 편리하게 액세스할 수 있습니다. 배열 요소. 그러나 때로는 마지막 반복을 다른 반복과 구별해야 하는 경우도 있습니다.
범위의 마지막 요소에 대해 고유한 형식이 필요한 템플릿을 고려해 보세요.
{{range $i, $e := .SomeField}} {{if $i}}, {{end}} $e.TheString {{end}}
이 템플릿은 출력을 생성합니다. like:
one, two, three
이 동작을 수정하고 마지막 요소 앞에 "and"를 출력하려면:
one, two, and three
범위의 어느 요소가 마지막인지 결정해야 합니다.
템플릿 외부에서 배열 길이를 추적하는 것이 가능하지만 이 방법을 사용하면 배열 길이의 변화를 고려하지 않는 정적 값이 생성됩니다.
해결책은 Go의 함수 주입을 활용하는 데 있습니다. 템플릿 기능. 사용자 정의 함수를 정의하면 마지막 요소를 동적으로 식별하는 것이 가능해집니다.
package main import ( "os" "reflect" "text/template" ) var fns = template.FuncMap{ "last": func(x int, a interface{}) bool { return x == reflect.ValueOf(a).Len() - 1 }, } func main() { t := template.Must(template.New("abc").Funcs(fns).Parse(`{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`)) a := []string{"one", "two", "three"} t.Execute(os.Stdout, a) }
이 접근 방식은 리플렉션을 활용하여 배열의 길이를 동적으로 결정하고 이를 현재 인덱스 $i와 비교합니다. 인덱스가 배열 길이에서 1을 뺀 값과 일치하면 마지막 함수는 true를 반환하여 현재 요소가 범위의 마지막 요소임을 나타냅니다.
또는 리플렉션 없이 len 함수를 사용할 수도 있습니다.
package main import ( "os" "text/template" ) func main() { t := template.Must(template.New("abc").Parse(`{{range $i, $e := .}}{{if $i}}, {{end}}{{if len .}}and {{end}}{{$e}}{{end}}.`)) a := []string{"one", "two", "three"} t.Execute(os.Stdout, a) }
위 내용은 Go 템플릿 범위에서 마지막 항목을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go Language Pack 가져 오기 : 밑줄과 밑줄이없는 밑줄의 차이점은 무엇입니까?

이동 중에 테스트를 위해 모의 개체와 스터브를 작성하려면 어떻게합니까?

Beego 프레임 워크에서 페이지간에 단기 정보 전송을 구현하는 방법은 무엇입니까?

GO에서 제네릭에 대한 사용자 정의 유형 제약 조건을 어떻게 정의 할 수 있습니까?

추적 도구를 사용하여 GO 응용 프로그램의 실행 흐름을 이해하려면 어떻게해야합니까?

Linters 및 정적 분석 도구를 사용하여 GO 코드의 품질과 유지 관리를 향상시킬 수 있습니까?

MySQL 쿼리 결과 목록을 GO 언어로 사용자 정의 구조 슬라이스로 변환하는 방법은 무엇입니까?
