Struct 戈兰的结构

Struct 戈兰的结构,struct,go,Struct,Go,我只是从GoLang开始,我正在看他们的一个教程() 在他们的一个例子中,他们将一个变量设置为一个结构,但我很困惑,他们是如何在下面的for循环中访问结构的元素的?有人能澄清一下吗?非常感谢 代码: 下面是代码,其中包含一些注释,以帮助澄清其中的每个语句角色 import "testing" func TestReverse(t *testing.T) { cases := []struct { // declaration of anonymous type in,

我只是从GoLang开始,我正在看他们的一个教程()

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

代码:


下面是代码,其中包含一些注释,以帮助澄清其中的每个语句角色

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 := []struct {
        in, want string
    }
第一对大括号中的这一位是结构的定义。这是一个匿名类型,一个普通的声明如下所示

    type case struct {
        in string
        want string
    }
如果您有类似的东西,那么在这个包的作用域中将有一个名为
case
的类型(如果您想将其“公开”,则不导出,因此需要将其改为
类型case
)。相反,examples结构是匿名的。它的工作原理与普通类型相同,但是作为开发人员,您将无法引用该类型,因此只能实际使用此处初始化的集合。在内部,此类型与任何其他结构相同,字段有2个未报告的字符串。这些字段在
want
中命名为
。请注意,在这里的赋值
案例中:=[]struct
struct
之前有
[]
,这意味着您正在声明此匿名类型的切片

接下来的一点,称为静态初始化。这是将集合初始化为类型的语法。这些嵌套位中的每一位,如
{“”,“}
,都是其中一个匿名结构的声明和初始化,再次用大括号表示。在本例中,您将分别为
中的
want
分配两个空字符串(如果不使用名称,则顺序与定义中的顺序相同)。外部的一对大括号用于切片。如果您的切片是say int或string,那么您就只需要在那里有值,而不需要额外的嵌套级别,比如
myInts:=[]int{5,6,7}

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

去什么是结构的根

在其中声明变量,然后 您可以从函数中使用它。 例如:


代码如何能够通过c.in和c.out访问结构中的字符串?@thegreenfrog循环正在迭代结构的切片,共有3个。每一行
{“Hello,world”,“dlrow,olleH”}
都在实例化一行
for uu,c:=range cases
或多或少是一个foreach循环,我将其理解为“对于
cases
中的每个case
c
通常被称为访问操作符(不确定Go是否有不同的特定名称),您可以使用它访问结构上的属性。如果我有一个结构
A
和一些字段
One
Two
Three
,我可以从类型
A
的实例访问这些字段,称之为
A
,比如
A.One
A.Two
A.Three
。如果需要进一步澄清,我可以在回答中对此进行扩展。如果您不熟悉访问操作符的使用,我建议您对面向对象编程做一些一般性的阅读,因为它几乎在每种语言中都使用。好吧,那么
中的
想要
基本上是我们访问每个片段中的两个元素的变量吗?@GreenFrog我将在回答中对此进行更新。本例中的声明结合了几个不同的概念,因此如果我分解代码,就会更加清楚。他们不是将变量设置为结构,而是将其设置为结构的一部分。
    {
        {"Hello, world", "dlrow ,olleH"},
        {"Hello, 世界", "界世 ,olleH"},
        {"", ""},
    }
package main

import (
    "fmt"

)

func main() {
    Get()

}

func Get(){
    out := new(Var)

    out.name = "james"

    fmt.Println(out.name)
}
type Var struct {
    name string
}