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