猿问

GoLang 中的结构

我刚开始使用 GoLang,我正在查看他们的教程之一 ( https://golang.org/doc/code.html )。


在他们的一个例子中,他们将一个变量设置为一个结构,但我很困惑他们如何在下面的 for 循环中访问结构的元素?有人可以澄清一下吗?非常感谢!


代码:


package stringutil


import "testing"


func TestReverse(t *testing.T) {

    cases := []struct {

        in, want string

    }{

        {"Hello, world", "dlrow ,olleH"},

        {"Hello, 世界", "界世 ,olleH"},

        {"", ""},

    }

    for _, c := range cases {

        got := Reverse(c.in)

        if got != c.want {

            t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)

        }

    }

}


四季花海
浏览 142回答 2
2回答

慕田峪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"},        {"", ""},    }

一只甜甜圈

什么是结构的根。你在其中声明你的变量,这样你就可以从函数中使用它。例子:package mainimport (    "fmt")func main() {    Get()}func Get(){    out := new(Var)    out.name = "james"    fmt.Println(out.name)}type Var struct {    name string}
随时随地看视频慕课网APP

相关分类

Go
我要回答