Commit 9e1777f4 authored by Feng Xiao's avatar Feng Xiao

Merge pull request #1052 from tswast/master

Add region tags to the Go protobuf examples.
parents afbc89a2 7df1d773
...@@ -105,7 +105,10 @@ func main() { ...@@ -105,7 +105,10 @@ func main() {
log.Fatalln("Error reading file:", err) log.Fatalln("Error reading file:", err)
} }
} }
// [START marshal_proto]
book := &pb.AddressBook{} book := &pb.AddressBook{}
// [START_EXCLUDE]
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)
} }
...@@ -116,6 +119,7 @@ func main() { ...@@ -116,6 +119,7 @@ func main() {
log.Fatalln("Error with address:", err) log.Fatalln("Error with address:", err)
} }
book.People = append(book.People, addr) book.People = append(book.People, addr)
// [END_EXCLUDE]
// Write the new address book back to disk. // Write the new address book back to disk.
out, err := proto.Marshal(book) out, err := proto.Marshal(book)
...@@ -125,4 +129,5 @@ func main() { ...@@ -125,4 +129,5 @@ func main() {
if err := ioutil.WriteFile(fname, out, 0644); err != nil { if err := ioutil.WriteFile(fname, out, 0644); err != nil {
log.Fatalln("Failed to write address book:", err) log.Fatalln("Failed to write address book:", err)
} }
// [END marshal_proto]
} }
...@@ -11,25 +11,29 @@ import ( ...@@ -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() { ...@@ -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)
} }
...@@ -8,6 +8,30 @@ import ( ...@@ -8,6 +8,30 @@ import (
pb "github.com/google/protobuf/examples/tutorial" pb "github.com/google/protobuf/examples/tutorial"
) )
func TestWritePersonWritesPerson(t *testing.T) {
buf := new(bytes.Buffer)
// [START populate_proto]
p := pb.Person{
Id: 1234,
Name: "John Doe",
Email: "jdoe@example.com",
Phones: []*pb.Person_PhoneNumber{
{Number: "555-4321", Type: pb.Person_HOME},
},
}
// [END populate_proto]
writePerson(buf, &p)
got := buf.String()
want := `Person ID: 1234
Name: John Doe
E-mail address: jdoe@example.com
Home phone #: 555-4321
`
if got != want {
t.Errorf("writePerson(%s) =>\n\t%q, want %q", p.String(), got, want)
}
}
func TestListPeopleWritesList(t *testing.T) { func TestListPeopleWritesList(t *testing.T) {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
in := pb.AddressBook{[]*pb.Person{ in := pb.AddressBook{[]*pb.Person{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment