英文:
How to use .Key in go text/template usage
问题
我不理解http://golang.org/pkg/text/template/中的文档段落。
- 数据的键名,必须是一个映射(map),以句点开头,例如
.Key
结果是由键名索引的映射元素值。
键名调用可以链式组合并与任意深度的字段结合使用:
.Field1.Key1.Field2.Key2
尽管键名必须是字母数字标识符,但与字段名不同,它们不需要以大写字母开头。
键名也可以在变量上进行求值,包括链式调用:
$x.key1.key2
这是我的测试代码,但是失败了。代码:http://play.golang.org/p/lbLJ4yoL2T。
var season = map[int]string{1: "spring", 2: "summer",
3: "autumn", 4: "winter"}
func main() {
const greeting = `Welcome, {{.Key}}`
t := template.Must(template.New("greet").Parse(greeting))
err := t.Execute(os.Stdout, season)
if err != nil {
fmt.Println(err)
}
}
输出:
Welcome, template: greet:1:11: 在执行"greet"时无法评估类型为map[int]string的字段Key
英文:
I don't understand the document paragraph in http://golang.org/pkg/text/template/
- The name of a key of the data, which must be a map, preceded
by a period, such as
.Key
The result is the map element value indexed by the key.
Key invocations may be chained and combined with fields to any
depth:
.Field1.Key1.Field2.Key2
Although the key must be an alphanumeric identifier, unlike with
field names they do not need to start with an upper case letter.
Keys can also be evaluated on variables, including chaining:
$x.key1.key2
Here is my test code, but failed. code: http://play.golang.org/p/lbLJ4yoL2T.
var season = map[int]string{1: "spring", 2: "summer",
3: "autumn", 4: "winter"}
func main() {
const greeting = `Welcome, {{.Key}}`
t := template.Must(template.New("greet").Parse(greeting))
err := t.Execute(os.Stdout, season)
if err != nil {
fmt.Println(err)
}
}
Output
Welcome, template: greet:1:11: executing "greet" at <.Key>: can't evaluate field Key in type map[int]string
答案1
得分: 1
我会为你翻译以下内容:
我会假设 "Key" 是映射中的键(键/值对中的键)。此外,映射的键不能是 int 类型,无法像那样在模板中使用 {{.Key}}
。所以,请尝试使用 {{.a}}
,就像在你的 playground 的这个分支中所示:
var season = map[string]string{"a": "spring", "b": "summer",
"c": "autumn", "d": "winter"}
func main() {
const greeting = `Welcome, {{.a}}`
t := template.Must(template.New("greet").Parse(greeting))
err := t.Execute(os.Stdout, season)
if err != nil {
fmt.Println(err)
}
}
输出:
Welcome, spring
英文:
I'd assume "Key" is the key (as in key/value) of the map. Also, the map keys can't be an int to use it in the template like that. So instead of {{.Key}}
try {{.a}}
as shown in this fork of your playground:
var season = map[string]string{"a": "spring", "b": "summer",
"c": "autumn", "d": "winter"}
func main() {
const greeting = `Welcome, {{.a}}`
t := template.Must(template.New("greet").Parse(greeting))
err := t.Execute(os.Stdout, season)
if err != nil {
fmt.Println(err)
}
}
Output:
Welcome, spring
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论