2010-09-27 14 views
2

J'ai deux formes de déclaration de struct dans la portée de la fonction. Pour autant que je pouvais voir les woks ci-dessous snippet énumérés juste bien. La question est quelle est la différence entre les deux façons de déclaration? Est-ce seulement une question sémantique ou il y a quelque chose de compliqué sous les couvertures?Deux formes de déclaration de structure dans 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) 
} 

Répondre

3

L'un est un type nommé - vous pouvez créer plusieurs variables de ce type, si vous avez besoin, en utilisant le nom du type.

L'autre type n'a pas de nom. Vous ne pouvez pas créer plus de variables du type autre que l'opérateur :=.

2

person1 est un pointeur vers une structure, alors que person2 est une valeur de structure elle-même. Si vous aviez fait person1 := Person1{Name : "John Smith", Id : 10} alors ce serait le même