@ -11,25 +11,29 @@ import (
pb "github.com/google/protobuf/examples/tutorial"
pb "github.com/google/protobuf/examples/tutorial"
)
)
func listPeople ( w io . Writer , book * pb . AddressBook ) {
func writePerson ( w io . Writer , p * pb . Person ) {
for _ , p := range book . People {
fmt . Fprintln ( w , "Person ID:" , p . Id )
fmt . Fprintln ( w , "Person ID:" , p . Id )
fmt . Fprintln ( w , " Name:" , p . Name )
fmt . Fprintln ( w , " Name:" , p . Name )
if p . Email != "" {
if p . Email != "" {
fmt . Fprintln ( w , " E-mail address:" , p . Email )
fmt . Fprintln ( w , " E-mail address:" , p . Email )
}
}
for _ , pn := range p . Phones {
for _ , pn := range p . Phones {
switch pn . Type {
switch pn . Type {
case pb . Person_MOBILE :
case pb . Person_MOBILE :
fmt . Fprint ( w , " Mobile phone #: " )
fmt . Fprint ( w , " Mobile phone #: " )
case pb . Person_HOME :
case pb . Person_HOME :
fmt . Fprint ( w , " Home phone #: " )
fmt . Fprint ( w , " Home phone #: " )
case pb . Person_WORK :
case pb . Person_WORK :
fmt . Fprint ( w , " Work phone #: " )
fmt . Fprint ( w , " Work phone #: " )
}
fmt . Fprintln ( w , pn . Number )
}
}
fmt . Fprintln ( w , pn . Number )
}
}
func listPeople ( w io . Writer , book * pb . AddressBook ) {
for _ , p := range book . People {
writePerson ( w , p )
}
}
}
}
@ -41,19 +45,17 @@ func main() {
}
}
fname := os . Args [ 1 ]
fname := os . Args [ 1 ]
// [START unmarshal_proto]
// Read the existing address book.
// Read the existing address book.
in , err := ioutil . ReadFile ( fname )
in , err := ioutil . ReadFile ( fname )
if err != nil {
if err != nil {
if os . IsNotExist ( err ) {
log . Fatalln ( "Error reading file:" , err )
fmt . Printf ( "%s: File not found. Creating new file.\n" , fname )
} else {
log . Fatalln ( "Error reading file:" , err )
}
}
}
book := & pb . AddressBook { }
book := & pb . AddressBook { }
if err := proto . Unmarshal ( in , book ) ; err != nil {
if err := proto . Unmarshal ( in , book ) ; err != nil {
log . Fatalln ( "Failed to parse address book:" , err )
log . Fatalln ( "Failed to parse address book:" , err )
}
}
// [END unmarshal_proto]
listPeople ( os . Stdout , book )
listPeople ( os . Stdout , book )
}
}