From 7e31c4d930efa3f80d0f03c93e788ba73b847fd8 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Fri, 20 Nov 2015 15:32:53 -0800 Subject: Add a Go language example. This follows the other examples so that it can be used as a tutorial, such as the ones at: https://developers.google.com/protocol-buffers/docs/tutorials Even though Go generally does not use Makefiles, I added targets for the Go examples to be consistent with the other languages. Edit: Fix Travis run. Change to use $HOME instead of ~. Add protoc to path. GOPATH entry cannot start with shell metacharacter '~': "~/gocode" Edit(2): Fix Go code style to address comments. --- examples/list_people.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 examples/list_people.go (limited to 'examples/list_people.go') diff --git a/examples/list_people.go b/examples/list_people.go new file mode 100644 index 00000000..48b1fbfa --- /dev/null +++ b/examples/list_people.go @@ -0,0 +1,59 @@ +package main + +import ( + "fmt" + "io" + "io/ioutil" + "log" + "os" + + "github.com/golang/protobuf/proto" + pb "github.com/google/protobuf/examples/tutorial" +) + +func listPeople(w io.Writer, book *pb.AddressBook) { + for _, p := range book.People { + 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) + } + } +} + +// 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] + + // Read the existing address book. + in, err := ioutil.ReadFile(fname) + if err != nil { + if os.IsNotExist(err) { + fmt.Printf("%s: File not found. Creating new file.\n", fname) + } else { + 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) + } + + listPeople(os.Stdout, book) +} -- cgit v1.2.3