[英]Structs in 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)
}
}
}
下面是带有一些注释的代码,以帮助阐明每个语句在其中的作用。
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 main
import (
"fmt"
)
func main() {
Get()
}
func Get(){
out := new(Var)
out.name = "james"
fmt.Println(out.name)
}
type Var struct {
name string
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.