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

时间:2010-09-27 13:44:59

标签: struct go

我在函数范围内有两种形式的结构声明。据我所知,下面列出的列表片段就好了。问题是两种宣言方式之间的区别是什么?这只是一个语义问题,还是有些棘手的问题?

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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