慕田峪7331174
下面是带有一些注释的代码,以帮助阐明每个语句在此中的作用。import "testing"func TestReverse(t *testing.T) { cases := []struct { // declaration of anonymous type in, want string // fields on that type called in and want, both strings }{ {"Hello, world", "dlrow ,olleH"}, {"Hello, 世界", "界世 ,olleH"}, {"", ""}, } // composite literal initilization // note the use of := in assigning to cases, that op combines declaration and assignment into one statement for _, c := range cases { // range over cases, ignoring the index - the underscore means to discard that return value got := Reverse(c.in) // c is the current instance, access in with the familiar dot notation if got != c.want { // again, access operator on c, the current instance t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want) // more access } }}如果这有帮助,请告诉我。如果某些陈述仍然没有意义,我可以尝试用口语提供更多摘要或添加更多细节。此外,仅供参考,如果你不熟悉的范围内“范围”一个集合,返回k, v这里k是索引或键和v值。编辑:有关声明/初始化的详细信息 cases cases := []struct { in, want string }第一对花括号内的这一位是结构的定义。这是一个匿名类型,正常的声明应该是这样的; type case struct { in string want string }如果你有这样的东西,那么case在这个包的范围内会有一个类型被调用(不导出,如果你想把它设为“公共”,所以它需要type Case改为)。相反,示例结构是匿名的。它的工作方式与普通类型相同,但是作为开发人员,您将无法引用该类型,因此您实际上只能使用此处初始化的集合。在内部,此类型与具有 2 个未导出的字段字符串的任何其他结构相同。这些字段被命名为in和want。请注意,在这里分配cases := []struct你[]面前struct,这意味着你正在声明该匿名类型片。下一点,称为静态初始化。这是将集合初始化为类型的语法。这些嵌套位中的每{"", ""}一个都是这些匿名结构之一的声明和初始化,再次用花括号表示。在这种情况下,您分别为in和分配了两个空字符串want(如果您不使用名称,则顺序与定义中的相同)。外面的一对大括号用于切片。如果您的切片是 int 或 string 的,那么您将只拥有值,而无需像myInts := []int{5,6,7}. { {"Hello, world", "dlrow ,olleH"}, {"Hello, 世界", "界世 ,olleH"}, {"", ""}, }