如何构造切片结构的对象?
How do I construct an object of a slice struct?
package main
import (
"fmt"
)
type demo []struct {
Text string
Type string
}
func main() {
d := demo{
Text: "Hello",
Type: "string",
}
}
在这段代码中,我在声明 demo
结构的对象时出错:
./prog.go:11:3: undefined: Text
./prog.go:11:9: cannot use "Hello" (untyped string constant) as struct{Text string; Type string} value in array or slice literal
./prog.go:12:3: undefined: Type
./prog.go:12:9: cannot use "string" (untyped string constant) as struct{Text string; Type string} value in array or slice literal
这很明显,因为它不是普通的结构声明所以请帮助我如何构造 demo
结构的对象?
由于您将 demo
声明为匿名结构的切片,因此您必须使用 demo{}
来构建切片并使用 {Text: "Hello", Type: "string"}
来构建项目。
func main() {
d := demo{{
Text: "Hello",
Type: "Anon",
}}
fmt.Println(d)
// [{Hello Anon}]
}
作为一个切片,你也可以make
它,但是追加项目需要复制匿名结构的定义:
func main()
d1 := make(demo, 0)
d1 = append(d1, struct {
Text string
Type string
}{"Hello", "Append"})
fmt.Println(d1)
// [{Hello Append}]
}
然而,尽管它可以编译,但它并不常见。只需定义命名的结构类型,然后 d
作为其中的一部分。语法几乎相同,但直截了当:
// just defined struct type
type demo struct {
Text string
Type string
}
func main() {
d2 := []demo{{
Text: "Hello",
Type: "Slice",
}}
fmt.Println(d2)
// [{Hello Slice}]
}
package main
import (
"fmt"
)
type demo []struct {
Text string
Type string
}
func main() {
d := demo{
Text: "Hello",
Type: "string",
}
}
在这段代码中,我在声明 demo
结构的对象时出错:
./prog.go:11:3: undefined: Text
./prog.go:11:9: cannot use "Hello" (untyped string constant) as struct{Text string; Type string} value in array or slice literal
./prog.go:12:3: undefined: Type
./prog.go:12:9: cannot use "string" (untyped string constant) as struct{Text string; Type string} value in array or slice literal
这很明显,因为它不是普通的结构声明所以请帮助我如何构造 demo
结构的对象?
由于您将 demo
声明为匿名结构的切片,因此您必须使用 demo{}
来构建切片并使用 {Text: "Hello", Type: "string"}
来构建项目。
func main() {
d := demo{{
Text: "Hello",
Type: "Anon",
}}
fmt.Println(d)
// [{Hello Anon}]
}
作为一个切片,你也可以make
它,但是追加项目需要复制匿名结构的定义:
func main()
d1 := make(demo, 0)
d1 = append(d1, struct {
Text string
Type string
}{"Hello", "Append"})
fmt.Println(d1)
// [{Hello Append}]
}
然而,尽管它可以编译,但它并不常见。只需定义命名的结构类型,然后 d
作为其中的一部分。语法几乎相同,但直截了当:
// just defined struct type
type demo struct {
Text string
Type string
}
func main() {
d2 := []demo{{
Text: "Hello",
Type: "Slice",
}}
fmt.Println(d2)
// [{Hello Slice}]
}