11828


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]


CC BY-SA 3.0
2015-06-28T11:45:27.847
11826
2015-06-28T12:16:22.703
5246
question
html go
Golangのhtml/templateでrangeの変数展開ができない

[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]

となります。


CC BY-SA 3.0
2015-06-28T12:16:22.703
11828
2015-06-28T12:16:22.703
11826
answer