我在函数范围内有两种形式的结构声明。据我所知,下面列出的列表片段就好了。问题是两种宣言方式之间的区别是什么?这只是一个语义问题,还是有些棘手的问题?
package main
import "fmt"
func main() {
type Person1 struct {
Name string
Id int
}
person1 := &Person1{Name : "John Smith", Id : 10}
fmt.Printf("(%s, %d)\n", person1.Name, person1.Id)
var person2 struct {
name string
id int
}
person2.name = "Kenneth Box"
person2.id = 20
fmt.Printf("(%s, %d)\n", person2.name, person2.id)
}
答案 0 :(得分:3)
一个是命名类型 - 如果需要,可以使用类型名称创建该类型的多个变量。
另一种类型没有名字。除了使用:=
运算符之外,您无法创建更多类型的变量。
答案 1 :(得分:2)
person1
是指向结构的指针,而person2
本身就是结构值。如果您已完成person1 := Person1{Name : "John Smith", Id : 10}
,那么它将是相同的