2 回答
TA贡献1828条经验 获得超13个赞
下面是带有一些注释的代码,以帮助阐明每个语句在此中的作用。
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"},
{"", ""},
}
TA贡献1836条经验 获得超5个赞
什么是结构的根。
你在其中声明你的变量,这样你就可以从函数中使用它。例子:
package main
import (
"fmt"
)
func main() {
Get()
}
func Get(){
out := new(Var)
out.name = "james"
fmt.Println(out.name)
}
type Var struct {
name string
}
- 2 回答
- 0 关注
- 141 浏览
添加回答
举报