Struct Go中结构声明的两种形式

Struct Go中结构声明的两种形式,struct,go,Struct,Go,在函数作用域中有两种形式的结构声明。就我所见,下面列出的代码片段很好。问题是这两种申报方式有什么区别?这只是一个语义问题,还是隐藏着一些棘手的问题 package main import "fmt" func main() { type Person1 struct { Name string Id int } person1 := &Person1{Name : "John Smith", Id : 10} fmt.P

在函数作用域中有两种形式的结构声明。就我所见,下面列出的代码片段很好。问题是这两种申报方式有什么区别?这只是一个语义问题,还是隐藏着一些棘手的问题

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)
}

一个是命名类型-如果需要,可以使用类型名称创建该类型的多个变量


另一种类型没有名称。除了使用
:=
运算符之外,您无法创建更多类型的变量。

person1
是指向结构的指针,而
person2
本身是结构值。如果您已经完成了
person1:=person1{Name:“John Smith”,Id:10}
,那么它将是相同的