当前位置: 首页 > 面试题库 >

如何在结构片的范围内而不是在切片的结构上范围

荀辰钊
2023-03-14
问题内容

在玩过Go HTML模板后,我发现所有用于遍历模板中对象的示例都是将切片的结构传递给模板,有点像此示例中所示:

type UserList struct {
    Id   []int
    Name []string
}

var templates = template.Must(template.ParseFiles("main.html"))

func rootHandler(w http.ResponseWriter, r *http.Request) {
    users := UserList{
        Id:   []int{0, 1, 2, 3, 4, 5, 6, 7},
        Name: []string{"user0", "user1", "user2", "user3", "user4"},
    }
    templates.ExecuteTemplate(w, "main", &users)
}

其中“主要”模板为:

{{define "main"}}
    {{range .Name}}
        {{.}}
    {{end}}
{{end}}

这有效,但是如果我仅使用.Name属性,则我不明白如何在每个ID旁边显示每个ID。我会发现在显示时将每个用户视为一个对象来对其属性进行分组会更合乎逻辑

因此,我的问题是:

如果我想将结构片段传递给模板怎么办? 使它起作用的语法是什么?我尚未在官方html / template
doc中找到或了解如何进行操作。我想像的东西看起来像这样:

type User struct {
    Id   int
    Name string
}
type UserList []User
var myuserlist UserList = ...

和一个看起来像这样的模板:(语法故意是错误的,只是为了被理解)

{{define "main"}}
    {{for each User from myuserlist as myuser}}
        {{myuser.Id}}
        {{myuser.Name}}
    {{end}}
{{end}}

问题答案:

用:

{{range .}}
    {{.Id}}
    {{.Name}}
{{end}}

为模板。
这是一个示例:http :
//play.golang.org/p/A4BPJOcfpB
您需要在包装概述中阅读有关“点”的更多信息,以了解如何正确使用它。http://golang.org/pkg/text/template/#pkg-
overview(检出“管道”部分)



 类似资料:
  • 我的最终目标是打乱矩阵的行(我使用代数)。 为了解决这个问题,我需要设置数组的可变范围(片)。假设我有一个数组(假设它是一个3x3矩阵): 我提取了一行,如下所示: 现在,对于knuth shuffle,我需要用另一行交换这个。我需要做的是: 但是,这样做失败了: 例子:http://is.gd/ULkN6j

  • 问题内容: 我不理解以下代码的行为。在创建作为结构指针切片的匹配结构列表时,代码始终会打印原始数组的最后一个元素(实际上不是匹配项),它会打印12和12。但是,如果将匹配项更改为[]窗口小部件代替[] * Widget,然后将输出10和11。 为什么是这样? 问题答案: 那是因为当您使用指针时,您将添加到数组。 请注意,实际上这是循环中使用的局部变量,因此,这不是您要添加到数组中的地址。 (即使变

  • 问题内容: 我输入的json数据是此数据(无法从外部资源更改): 我有两个结构将始终匹配数组中的数据: 显然,下面的代码不起作用,但是有可能在顶层(或其他方面)声明类似以下内容的代码: 问题答案: 使用两步过程进行编组。首先,解组一个任意JSON的列表,然后将该列表的第一个和第二个元素解组为各自的类型。 您可以在名为UnmarshalJSON的方法中实现该逻辑,从而实现json.Unmarshal

  • 我试图理解如何在Go中操作数据结构,以及它指向指针(带有副本或引用)的方法。 我的代码在Go Playground这里:https://play.golang.org/p/j_06RS5Xcz 我制作了一个结构的切片图,里面还有一个其他东西的切片。 在这里: 我想在以后的程序中附加其他项。似乎我必须使用指针来解决这个问题,但我不知道如何解决。 我的实体应该是这样吗? 如果是这样的话,我应该如何向它

  • 是要有: 看起来像下面的C代码?

  • 问题内容: 这是我的第一篇文章,所以请对我“轻松”。:) …我对许多传统的编程语言非常熟悉,但是我是Go语言的新手,很难理解切片和范围的用法。下面的程序代码和注释说明了我的震惊。谢谢! 编写了自己的Mod函数,因为在Go库中找不到。 声明结构数组并添加一些记录 加载数据会产生我期望的输出 现在,我修改值并打印它们,以查看它们是否显示为已修改。这看起来像预期的那样。 现在,我只需再次遍历同一范围并打