2012-05-25 17 views
6

Tôi đang cố gắng viết chuỗi như thế này bằng hệ thống mẫu của go: (p1, p2, p3), trong đó p1, p2, .. xuất phát từ một mảng trong chương trình. Vấn đề của tôi là làm thế nào để đặt dấu phẩy đúng cho phần tử cuối cùng (hoặc thứ nhất).Xử lý trường hợp đặc biệt cho phần tử cuối cùng của một phạm vi trong các mẫu văn bản của Google Go

phiên bản làm việc phi của tôi mà kết quả đầu ra (p1, p2, p3,) trông như thế này:

package main 

import "text/template" 
import "os" 
func main() { 
    ip := []string{"p1", "p2", "p3"} 
    temp := template.New("myTemplate") 
    temp,_ = temp.Parse(paramList) 
    temp.Execute(os.Stdout, ip) 

} 

const paramList = 
`{{ $i := . }}({{ range $i }}{{ . }}, {{end}})` 

đầu mối tốt nhất của tôi cho đến nay được tìm thấy ở đây http://golang.org/pkg/text/template/ trong tuyên bố sau:

Nếu một hành động "range" khởi tạo một biến, biến được đặt thành các phần tử kế tiếp của phép lặp. Ngoài ra, một "phạm vi" có thể tuyên bố hai biến, cách nhau bằng một dấu phẩy:

$index, $element := pipeline 

trong trường hợp $ index và $ phần tử được thiết lập để các giá trị liên tiếp của mảng index/lát hoặc bản đồ chính và yếu tố , tương ứng. Lưu ý rằng nếu chỉ có một biến, nó được gán phần tử; điều này ngược lại với quy ước trong mệnh đề Go. nơi đề xuất rằng chỉ mục

Điều này gợi ý rằng có thể giữ chỉ mục trong lần lặp nhưng tôi không thể tìm ra ý nghĩa của phạm vi tuyên bố hai biến và vị trí trong mẫu. được cho là được tuyên bố.

Trả lời

8

Xem this example từ danh sách gửi thư đi. Một chìa khóa cho mẹo này là mẫu if khác với ngôn ngữ Go if. Mẫu có thể kiểm tra giá trị bằng không, không giống như ngôn ngữ Go yêu cầu boolean. Sau đó, phép thuật là {{if $index}},{{end}} trong đó chỉ số $ không cần khai báo khác với sự xuất hiện của nó trong nhiệm vụ.

+0

Cảm ơn. Điều đó giải quyết nó! – Laserallan

Các vấn đề liên quan