Golangのhtml/templateでrangeの変数展開ができない


Golangのhtml/templateを使った下記のコードがうまく動きません。  
template内でrangeを使い、struct a の
rの要素を$index2で一つずつ展開させたいのですが、展開されず、Stdoutに何も表示されません。どうすれいいのでしょうか?

[このコードのPlayGround](http://play.golang.org/p/gmDFsYtq51)

[code]

    
    package main
    
    import (
        "html/template"
        "os"
    )
    
    type a struct {
        r []string
    }
    
    func main() {
        my_struct := a{r:[]string{"A", "B", "C"}}
        template_string := "{{ range $index, $index2 := .r }} {{ $index2 }}{{ end }}"
        //range
        temp := template.Must(template.New("foo").Parse(template_string))
        temp.Execute(os.Stdout, my_struct)
    
    }
    
    
[/code]



[code]

    temp.Execute(os.Stdout, my_struct)
    
[/code]

を、

[code]

    if err := temp.Execute(os.Stdout, my_struct); err != nil {
        fmt.Println(err)
    }
    
[/code]

として実行しますと、以下のメッセージが表示されます。

[code]

    template: foo:1:28: executing "foo" at <.r>: r is an unexported field of struct type main.a
    
[/code]

つまり、フィールド `r` を `R` など(大文字で始まる名前)にする必要がありそうです。

実際、`R` に置き換えて実行しますと、

[code]

    $ go run a.go
       A B C
    
[/code]

となります。



[code]

    temp.Execute(os.Stdout, my_struct)
    
[/code]

を、

[code]

    if err := temp.Execute(os.Stdout, my_struct); err != nil {
        fmt.Println(err)
    }
    
[/code]

として実行しますと、以下のメッセージが表示されます。

[code]

    template: foo:1:28: executing "foo" at <.r>: r is an unexported field of struct type main.a
    
[/code]

つまり、フィールド `r` を `R` など(大文字で始まる名前)にする必要がありそうです。

実際、`R` に置き換えて実行しますと、

[code]

    $ go run a.go
       A B C
    
[/code]

となります。

