]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: add example for StructOf
authorSebastien Binet <seb.binet@gmail.com>
Tue, 6 Dec 2016 09:40:31 +0000 (10:40 +0100)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 6 Dec 2016 20:18:12 +0000 (20:18 +0000)
This CL adds a simple example for StructOf.
The example shows how StructOf can be used in a JSON roundtrip.

Change-Id: I9ff1ea9cb8c0cf297c5fae74e68b89931076adfd
Reviewed-on: https://go-review.googlesource.com/33953
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
src/reflect/example_test.go

index 9e2b9b3e9724dcc5eb0d6956841d50c71b832dea..f959b95846383d822509a87f0d44deb682be0a38 100644 (file)
@@ -5,6 +5,8 @@
 package reflect_test
 
 import (
+       "bytes"
+       "encoding/json"
        "fmt"
        "io"
        "os"
@@ -107,3 +109,42 @@ func ExampleTypeOf() {
        // Output:
        // true
 }
+
+func ExampleStructOf() {
+       typ := reflect.StructOf([]reflect.StructField{
+               {
+                       Name: "Height",
+                       Type: reflect.TypeOf(float64(0)),
+                       Tag:  `json:"height"`,
+               },
+               {
+                       Name: "Age",
+                       Type: reflect.TypeOf(int(0)),
+                       Tag:  `json:"age"`,
+               },
+       })
+
+       v := reflect.New(typ).Elem()
+       v.Field(0).SetFloat(0.4)
+       v.Field(1).SetInt(2)
+       s := v.Addr().Interface()
+
+       w := new(bytes.Buffer)
+       if err := json.NewEncoder(w).Encode(s); err != nil {
+               panic(err)
+       }
+
+       fmt.Printf("value: %+v\n", s)
+       fmt.Printf("json:  %s", w.Bytes())
+
+       r := bytes.NewReader([]byte(`{"height":1.5,"age":10}`))
+       if err := json.NewDecoder(r).Decode(s); err != nil {
+               panic(err)
+       }
+       fmt.Printf("value: %+v\n", s)
+
+       // Output:
+       // value: &{Height:0.4 Age:2}
+       // json:  {"height":0.4,"age":2}
+       // value: &{Height:1.5 Age:10}
+}