| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 
							- package main
 
- import (
 
- 	"fmt"
 
- 	"io"
 
- 	"io/ioutil"
 
- 	"log"
 
- 	"os"
 
- 	"github.com/golang/protobuf/proto"
 
- 	pb "github.com/protocolbuffers/protobuf/examples/tutorial"
 
- )
 
- func writePerson(w io.Writer, p *pb.Person) {
 
- 	fmt.Fprintln(w, "Person ID:", p.Id)
 
- 	fmt.Fprintln(w, "  Name:", p.Name)
 
- 	if p.Email != "" {
 
- 		fmt.Fprintln(w, "  E-mail address:", p.Email)
 
- 	}
 
- 	for _, pn := range p.Phones {
 
- 		switch pn.Type {
 
- 		case pb.Person_MOBILE:
 
- 			fmt.Fprint(w, "  Mobile phone #: ")
 
- 		case pb.Person_HOME:
 
- 			fmt.Fprint(w, "  Home phone #: ")
 
- 		case pb.Person_WORK:
 
- 			fmt.Fprint(w, "  Work phone #: ")
 
- 		}
 
- 		fmt.Fprintln(w, pn.Number)
 
- 	}
 
- }
 
- func listPeople(w io.Writer, book *pb.AddressBook) {
 
- 	for _, p := range book.People {
 
- 		writePerson(w, p)
 
- 	}
 
- }
 
- // Main reads the entire address book from a file and prints all the
 
- // information inside.
 
- func main() {
 
- 	if len(os.Args) != 2 {
 
- 		log.Fatalf("Usage:  %s ADDRESS_BOOK_FILE\n", os.Args[0])
 
- 	}
 
- 	fname := os.Args[1]
 
- 	// [START unmarshal_proto]
 
- 	// Read the existing address book.
 
- 	in, err := ioutil.ReadFile(fname)
 
- 	if err != nil {
 
- 		log.Fatalln("Error reading file:", err)
 
- 	}
 
- 	book := &pb.AddressBook{}
 
- 	if err := proto.Unmarshal(in, book); err != nil {
 
- 		log.Fatalln("Failed to parse address book:", err)
 
- 	}
 
- 	// [END unmarshal_proto]
 
- 	listPeople(os.Stdout, book)
 
- }
 
 
  |